Ошибка процедуры сервера SQL - PullRequest
0 голосов
/ 29 мая 2010
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

ЧТО ТАКОЕ ОШИБКА В ЭТОЙ ПРОЦЕДУРЕ ПОЖАЛУЙСТА, ПОМОГИТЕ.

1 Ответ

0 голосов
/ 23 июля 2010
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

Предполагается, что вы вызываете это через .NET, запускаете регулярное выражение для текста, чтобы исключить все символы, которые не являются буквами или пробелами. Как [! @ # $% ^ & * ()?;: '"\ |].

Рассмотрите возможность перезаписи как 5 строк (HotelsByCountry, HotelsByState, HotelsByCity, HotelsByName, HotelsByRating). Это повысит производительность и позволит выполнять заказы и подкачку страниц (например, Row_number () OVER (order by StartDate)). Это также сделает их абсолютно безопасными.

...