CREATE PROCEDURE USP_SEARCH_HOTELS
(
@Text varchar(50),
@Type varchar(40)
)
AS
BEGIN
Declare @Query VARCHAR(60)
IF @Type = 'By Country'
BEGIN
SET @Query = 'Hotel.countryName like '+ @Text+'%'
END
ELSE IF @Type = 'By State'
BEGIN
SET @Query = 'HOTEL.stateName like '+ @Text+'%'
END
ELSE IF @Type='By Property Name'
BEGIN
SET @Query='hotel.propertyname like'+ @Text+'%'
End
ELSE IF @Type='By Rating'
BEGIN
SET @Query='hotel.starRating='+ Cast(@Text as INT)
END
ELSE IF @Type='By City'
BEGIN
SET @Query='hotel.cityName like '+ @Text+'%'
END
begin
select * from hotel,tbl_cust_info
where
hotel.agentID=Tbl_Cust_Info.Cust_ID
and
(@Query)
end
END
这个程序中的错误是什么请帮助。
答案 0 :(得分:0)
DECLARE @Final nvarchar(1000) -- Separate partial and final
DECLARE @Partial nvarchar(100) -- let's you maintain and debug better
SET @Final = 'select * from hotel
join tbl_cust_info
on hotel.agentID=Tbl_Cust_Info.Cust_ID
where' + @Partial
Assumi您通过.NET调用此方法在文本上运行Regexp以消除所有不是字母或空格的字符。比如[!@#$%^& *()?;:'“\ |]。
考虑重写为5个(酒店宾州,宾州,宾馆,HotelsByName,HotelsByRating)。这将增加你的性能,让你做orderby和分页(如Row_number()OVER(由StartDate订购))。这也将使他们完全安全。