конкатенация строк t-sql - PullRequest
0 голосов
/ 20 марта 2010

у меня есть таблица со следующим столбцом

Type
--------
type 1
type 2
type 3

Как я могу преобразовать вышеупомянутое в строку как ('type 1', 'type 2', 'type 3')

Я хочу использовать вывод в моем запросе t-sql с предложением IN. Что-то вроде select * from TableA, где SomeColumn IN («Тип 1», «Тип 2», Тип 3 »)

Я привык следовать за выводом (тип 1, тип 2, тип 3)

select '(' + STUFF((select ', ' + Type from TableA for xml path ('')),1,2,'') + ')'

Но не знаю, как вставить одинарные кавычки.

Ответы [ 3 ]

1 голос
/ 20 марта 2010

Просто попробуйте это для удовольствия:)

declare @s1 varchar(8000)
declare @s2 varchar(8000)

update t
  set  
    @s1 = ISNULL(@s1 + ',', '') + '''' + REPLACE(t.Type, '''', '''''') + ''''
   ,@s2 = 'select * from TableA where Type IN (' + @s1 + ')' 
from TableA t

select @s2

REPLACE(t.Type, '''', '''''') - если в поле есть апострофы в тексте поля, REPLACE удвоит егоПопробуй изменить type1 на typ'e1 или typ''e1 в твоей таблице

Старайтесь избегать предложения IN и подзапросов .Они работают очень медленно (сканирование таблицы и так далее ...)!Используйте это:

select a.Type 
from TableA a 
  inner join TheOtherTable b 
  on a.Type = b.Type
1 голос
/ 20 марта 2010

Обычный способ с подвыбором:

select * from TableA where SomeColumn IN (
    select Type from TheOtherTable
)

Полагаю, у вас также есть предложение where на подвыборке.

В зависимости от сложности, иногда вы делаете это вместо внешних объединений:

select * from TableA a
left outer join TheOtherTable b on a.SomeColumn = b.Type
where b.Type is not null

То, что вы используете, зависит от критериев, которые вы применяете как к записям с TableA, так и к тому, что я назвал TheOtherTable (тот, с Type).

0 голосов
/ 20 марта 2010

Всякий раз, когда вам нужна цитата, введите ее дважды

так "становится"

так ваш код становится

select '(' + STUFF((select ''',''' + Type from TableA for xml path ('')),1,2,'') + ''')'

выше генерирует

('type 1','type 2','type 3')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...