T-SQL While循环和级联
-
19-08-2019 - |
题
我有应该拉出的记录和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
不隶属于 StackOverflow