在循环中动态创建查询

Myk*_*l73 1 sql-server t-sql sql-server-2012

我正在遍历一个表,试图创建一个动态的 sql 查询。它似乎工作正常,除非我连接结果以制作实际语句。伪代码如下

WHILE (Data is in the table)
BEGIN
SELECT TOP 1 @result = result from table

@sql = @sql + ', ' + @result

END
Run Code Online (Sandbox Code Playgroud)

如果我查看@sql每个循环,我会看到预期的结果,但是当循环完成时@sql是空的。有人可以解释为什么吗?

Han*_*non 5

假设你的伪代码是你的实际代码正在做什么的一个很好的近似,你需要类似的东西:

DECLARE @sql NVARCHAR(MAX);
SET @sql = '';
WHILE (Data is in the table)
BEGIN
    SELECT TOP 1 @result = result from table;

    @sql = @sql + ', ' + @result;

END
Run Code Online (Sandbox Code Playgroud)

如果@sql在循环之前没有初始化为零长度的字符串,SQL Server 将尝试附加@result到一个 NULL 字符串,这将导致一个 NULL 字符串,因此@sql在循环的末尾将显示为空。