我有应该拉出的记录和Concat的各为一个字符串的SQL查询,然后输出该字符串。查询的重要部分是在下面。

DECLARE @counter int;
SET @counter = 1;

DECLARE @tempID varchar(50);
SET @tempID = '';

DECLARE @tempCat varchar(255);
SET @tempCat = '';

DECLARE @tempCatString varchar(5000);
SET @tempCatString = '';

WHILE @counter <= @tempCount
BEGIN

    SET @tempID = (
    SELECT [Val]
    FROM #vals
    WHERE [ID] = @counter);

    SET @tempCat = (SELECT [Description] FROM [Categories] WHERE [ID] = @tempID);
    print @tempCat;

    SET @tempCatString = @tempCatString + '<br/>' + @tempCat;
    SET @counter = @counter + 1;

END

当脚本运行时,@tempCatString输出作为零而@tempCat始终正确地输出。有一些原因,串联不会While循环内工作?这似乎是错误的,因为递增@counter完美的作品。那么,有没有别的东西我失踪?

有帮助吗?

解决方案

看起来它应该工作,但对于somereason它似乎认为@tempCatString为null,这就是为什么你总是得到一个空值nullconcatenated到别的仍然是零。建议你在每个变量的COALESCE()尝试将其设置为“”如果他们是空的。

其他提示

这会更有效....

select @tempCatString = @tempCatString + Coalesce(Description,'') + '<br/>' from Categories...

select @fn

还看CONCAT_NULL_YIELDS_NULL作为一个选项,以解决您的拼接问题,但我会避免这条道路

我同意keithwarren,但我会始终确保BY子句添加命令来查询。然后,你可以肯定,究竟什么样的顺序值在被连接在一起。

另外,聚结以替换“” NULL值将有效地产生空白的行。我不知道,如果你想他们或没有,但如果不只是在WHERE子句中过滤,而不是...

最后,你似乎有一个临时表,包括你感兴趣的ID。此表可以只包含在JOIN过滤源表...

DELCARE @output VARCHAR(8000)
SET @output = ''

SELECT
    @output = @output + [Categories].Description + '<br/>'
FROM
    Categories
INNER JOIN
    #vals
        ON #vals.val = [Categories].ID
WHERE
   [Categories].Description IS NOT NULL
ORDER BY
   [Categories].Description
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top