关于存储过程字符串的一个比较急的问题.
小疙瘩 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 这个地方应该怎么写,帮我改一下,谢谢了.
我很着急.我现在没有分可给了,抱歉.请你们帮我解决.