我有一个包含以下列的表
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,'') + ')'
但不知道如何插入单引号。
答案 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')