繁体   English   中英

t-sql字符串串联

[英]t-sql string concatenation

我有一个具有以下列的表

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

我如何将上述内容转换为字符串(“类型1”,“类型2”,“类型3”)

我想在带有IN子句的t-sql查询中使用输出。 类似于从TableA中选择*的内容,其中SomeColumn IN(“类型1”,“类型2”,类型3”)

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

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

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

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

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 )应用的条件。

只是尝试好玩:)

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会将其加倍。 尝试在表TableA 中将 type1更改为typ'e1typ'e1

我开玩笑了...

尽量避免使用IN子句和子查询 它们工作非常慢(表扫​​描等)! 用这个:

select a.Type 
from TableA a 
  inner join TheOtherTable b 
  on a.Type = b.Type

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

所以'变成''

所以你的代码变成

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

以上产生

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM