2013-08-27 2 views
0

Запрос дает O/P, какС в пункте при передаче коллекции в качестве параметра в Sql Server

ItemSizeNM

(ColName)

'U', 'V', 'X', 'Y '

Но когда я использовал это как вход для IN Query в коде, который я сделал. Он не дает одинаковый набор результатов. Почему это происходит ...? Таблица MstItemSize имеет правильные данные.

declare @tblRingSize table (ringSize varchar(100))   
    declare @ringSize varchar(100)   
    select @ringSize= cast((otherringSize) as varchar) 
    from ##tempBand where styleNo='BD00002'; 
  1. INSERT INTO @tblRingSize выбора пункта из dbo.SplitStrings_CTE (@ringSize, '');

  2. выберите ItemSizeNm из MstItemSize, где SizeTypeNm = 'Кольцо' и
    ItemSizeNm
    в - (U '', 'V', 'X', 'Y')

    (выберите Заменить ( (выберите STUFF ((выберите '' ',' '' + ringSize из @tblRingSize для XML PATH ('')), 1,2, '') + '' '') , '', ''))

  3. выберите Заменить ( (выберите ВЕЩЕСТВО ((выберите '' ' ''' + ringSize из @tblRingSize для XML PATH ('')), 1,2, '') + '' '') , '', '')

+0

Попробуйте не использовать 'varchar' а' VARCHAR (100) '. Также почему вы используете глобальную таблицу ## temp? Каково определение SplitStrings_CTE? Что такое тип данных otherringSize в ## tempBand? –

+0

Я использовал глобальную температуру, потому что я тоже хочу использовать эту таблицу в других запросах. SplitStrings_CTE Функция spilts comma разделяет charaters, и тип данных otherringSize - varchar (100) –

+0

Другие запросы * где *? Также я знаю, что делает функция split, но, возможно, она не делает это правильно (например, объявление varchar может безболезненно обрезать вашу строку). Где вы получили функцию? –

ответ

1

Вам не нужно использовать STUFF, FOR XML или REPLACE подзапроса:

select 
    ItemSizeNm 
from 
    MstItemSize 
where SizeTypeNm ='Ring' 
and ItemSizeNm in (select ringSize from @tblRingSize) 
+0

It Дает только первое значение. я.е U I Want It, как U V X Y –

+0

Второй Заменить дает мне правильный результат, как 'U', 'V', 'X', 'Y' Когда я скопировал и Передайте это в IN-подразделении, в котором комментировали это. Хорошо. Но когда используется оператор REPLACE, он НЕ РАБОТАЕТ –

+0

Не нужно отформатировать его. На самом деле он не должен быть отформатирован вообще - подзапрос должен возвращать набор записей, а не строку, которую вы создаете вручную. –

 Смежные вопросы

  • Нет связанных вопросов^_^