关于存储过程字符串的一个比较急的问题.

小疙瘩 2006-04-12 01:08:59
以下是我写的存储过程:

CREATE PROCEDURE dbo.GetHotelInfoByMoreParams
@CityID int,
@ProviceID int,
@HotelType int,
@HotelName nvarchar(255),
@decHotelPrice money
AS
declare @strSql nvarchar(4000)
set @strSql = ' select * from HotelInfo where 1=1 '
--判断 @CityID 是否大于零(即有此参数值)
if len(@CityID)>0
set @strSql = @strSql + ' and CityID = ' + convert(nvarchar(50),@CityID)

--判断 @ProviceID 是否大于零(即有此参数值)
if len(@ProviceID)>0
set @strSql = @strSql + ' and ProviceID = ' + convert(nvarchar(50),@ProviceID)

--判断 @HotelType 是否大于零(即有此参数值)
if len(@HotelType)>0
set @strSql = @strSql + ' and HotelType = ' + convert(nvarchar(50),@HotelType)

--判断 @HotelName 是否大于零(即有此参数值)
if len(@HotelName)>0
set @strSql = @strSql + ' and HotelName = ' + @HotelName

--判断 @decHotelPrice 是否等于零(即有此参数值)
if @decHotelPrice != 0
set @strSql = @strSql + ' and HotelPrice >= ' + convert(nvarchar(50),@decHotelPrice)
exec(@strSql)

RETURN

现在的问题是:
当我执行该过程 ----- exec GetHotelInfoByMoreParams 1100,24,3,'sda',500 ----

是会提示报错: 服务器: 消息 207,级别 16,状态 3,行 1 列名 'sda' 无效。

上述过程系统生成的SQL语句是这样的:
select * from HotelInfo where 1=1 and CityID = 1100 and ProviceID = 24 and HotelType = 3 and HotelName = sda and HotelPrice = 1000.00

错误很明显,就是因为 HotelName = sda 处的 sda 没有引号 所以执行不了.

但是,上面那个存储过程明明声名的是一个字符串类型的参数@HotelName 正常来说应该不能出现错误,可是现在始终我也解决不了.
请问高手们,我在存储过程里,有关 @HotelName 这个地方应该怎么写,帮我改一下,谢谢了.
我很着急.我现在没有分可给了,抱歉.请你们帮我解决.
...全文
91 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xeqtr1982 2006-04-12
  • 打赏
  • 举报
回复
alter PROCEDURE dbo.GetHotelInfoByMoreParams
@CityID int,
@ProviceID int,
@HotelType int,
@HotelName nvarchar(255),
@decHotelPrice money
AS
declare @strSql nvarchar(4000)
set @strSql = ' select * from HotelInfo where 1=1 '
--判断 @CityID 是否大于零(即有此参数值)
if len(@CityID)>0
set @strSql = @strSql + ' and CityID = ' + convert(nvarchar(50),@CityID)

--判断 @ProviceID 是否大于零(即有此参数值)
if len(@ProviceID)>0
set @strSql = @strSql + ' and ProviceID = ' + convert(nvarchar(50),@ProviceID)

--判断 @HotelType 是否大于零(即有此参数值)
if len(@HotelType)>0
set @strSql = @strSql + ' and HotelType = ' + convert(nvarchar(50),@HotelType)

--判断 @HotelName 是否大于零(即有此参数值)
if len(@HotelName)>0
set @strSql = @strSql + ' and HotelName = ''' + @HotelName +''''

--判断 @decHotelPrice 是否等于零(即有此参数值)
if @decHotelPrice != 0
set @strSql = @strSql + ' and HotelPrice >= ' + convert(nvarchar(50),@decHotelPrice)
exec(@strSql)

RETURN
--这样呢

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧