t-sql字符串连接

时间:2010-03-19 22:24:56

标签: sql sql-server-2005 tsql sql-server-2008

我有一个包含以下列的表

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

如何将上述内容转换为字符串('type 1','type 2','type 3')

我想在带有IN子句的t-sql查询中使用输出。类似于TableA中的select *,其中SomeColumn IN('Type 1','Type 2',Type 3')

我过去常常提出输出(类型1,类型2,类型3)

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

但不知道如何插入单引号。

3 个答案:

答案 0 :(得分:1)

通常的方法是使用子选择:

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的记录)。

答案 1 :(得分:1)

试试吧:)

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

答案 2 :(得分:0)

每当您需要报价时,请双击

所以'变成''

所以你的代码变成了

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

以上生成

('type 1','type 2','type 3')