Странная проблема T-SQL [дубликат]

На этот вопрос уже есть ответ здесь:

У меня есть большой запрос T-SQL (я поместил здесь только часть, потому что я уверен, что все остальное работает нормально):

 WHERE /*
                ******* missing filter *******
                this line should filter the risks by @LoggedInPersonID via role 
                ******************************
          AND */(@PropertyID IS NULL OR p.PropertyID = @PropertyID)
          AND (@PCodePattern IS NULL OR p.PCode LIKE @PCodePattern)
          AND (@ZipCodeIDS IS NULL 
                 OR p.ZipCodeID IN (@ZipCodeIDS))

Вы заметили, что @ZipCodeIDS - это список ... Ну, я заполните это из кода некоторыми идентификаторами. Когда @ZipCodeIDS содержит ОДИН идентификатор, он работает отлично, но если я попытаюсь отправить несколько идентификаторов (например: «14,15»), это даст мне ошибку ....

У вас есть какие-нибудь подсказки?

Ps: Of Конечно, я сделал @ZIpCodeIDS varchar, потому что у нас нет массива в T-SQL ...

ОБНОВЛЕНИЕ: Если я напрямую закодирую запрос: IN (14,11) , он отлично работает ... поэтому почему-то я неправильно отправляю этот параметр из своего кода для нескольких значений, я думаю, что он не видит "," в качестве разделителя ...

ОБНОВЛЕНИЕ 2 : Пытался разделить списки и поместить идентификаторы в table ... Когда zipCodeIDS имеет только один идентификатор, запрос работает отлично. Для нескольких, а не ... Вы видите что-то странное в ELSE?

    IF @ZipCodeIDS IS NOT NULL
BEGIN
    IF CHARINDEX(',', @ZipCodeIDS) = 0
    BEGIN
        insert @listofIDS values(@ZipCodeIDS)
    END
    ELSE
    BEGIN
        WHILE CHARINDEX(',', @ZipCodeIDS) != 0
        BEGIN
            insert @listofIDS values(Left(@ZipCodeIDS, PatIndex(',', @ZipCodeIDS) - 1))
            SET @ZipCodeIDS = SUBSTRING(@ZipCodeIDS, CHARINDEX(',',@ZipCodeIDS)+1, LEN(@ZipCodeIDS) - CHARINDEX(',',@ZipCodeIDS))
        END
    END
END
0
задан Cristian Boariu 12 August 2011 в 22:59
поделиться