我有一个COALESCE语句从表中提取数据:
DECLARE @Output NVARCHAR(MAX)
SELECT @Output = COALESCE(@Output + ', ', '') + '''' + tCCGroup + ''''
FROM tblActivityPerPPCC_Matrix
WHERE tPPCC = 'NSEA0101'
SELECT @Output OUTPUT
,输出如下。
'FADT', 'FD10RB', 'WA600'
我想将此输出字符串(现在位于变量@Output中)插入以下语句中:
SELECT * FROM XYZ
WHERE Column_Name IN (<< THE OUTPUT FROM COALESCE >>)
与
类似SELECT * FROM XYZ
WHERE Column_Name IN ('FADT', 'FD10RB', 'WA600')
此语句将转换为Cursor中的动态语句
任何帮助都将不胜感激。
皮尔
答案 0 :(得分:1)
根据你提到的描述,你不需要创建临时变量。您可以使用子查询。
SELECT *
FROM XYZ
WHERE Column_Name IN ( SELECT tCCGroup
FROM tblActivityPerPPCC_Matrix
WHERE tPPCC = 'NSEA0101' )
答案 1 :(得分:0)
也许我误解了这个问题,但是将该字符串合并到一个动态生成的查询中会看起来像这样。
DECLARE
@Output VARCHAR(MAX)
, @SQL VARCHAR(MAX)
, @Table_name varchar(64)
, @Column_name varchar(64)
set @Table_name = 'test'
set @Column_name = 'xyz'
SELECT @Output = COALESCE(@Output + ', ', '') + '''' + tCCGroup + ''''
FROM tblActivityPerPPCC_Matrix
WHERE tPPCC = 'NSEA0101'
set @sql = 'SELECT * '
+ ' FROM '
+ @Table_name
+ ' WHERE '
+ @Column_Name
+ ' IN ('
+ @Output
+ ')'
select @sql
-- exec (@sql)
答案 2 :(得分:0)
让人惊讶。为什么需要在游标中运行动态sql?从非常模糊的帖子中我看到根本不需要光标。如果你能解释你想要做什么并发布一些ddl和样本数据(或sql小提琴),我很乐意帮助你从你的过程中删除光标。