DECLARE @EmployeeIds VARCHAR(200)
SELECT @EmployeeIds = ISNULL (@EmployeeIds + ',', '') + CAST(ID AS VARCHAR(5))
FROM tblEmployee
WHERE Gender = 'Male'
PRINT @EmployeeIds
你知道我们如何得到1,3,4,5,6,9,10吗?我的意思是我们如何得到一个数组的答案而不是这样:
1
3
4
5
6
9
10
答案 0 :(得分:4)
我们如何得到一个数组的答案?
它不是一个数组。它是逗号分隔的字符串。它是通过多次分配给变量@EmployeeIds
生成的。 tblEmployee
中与WHERE
子句匹配的每一行。
@EmployeeIds
以null为开头。遇到第一行,ID为1。
@EmployeeIds= ISNULL (@EmployeeIds + ',', '') + CAST(ID AS VARCHAR(5))
≡ @EmployeeIds= ISNULL (NULL + ',', '') + '1' /*Substituting in variable and column values*/
≡ @EmployeeIds= ISNULL (NULL, '') + '1'
≡ @EmployeeIds= '' + '1'
所以@EmployeeIds在第一行之后是1
。
第二行已处理,ID
为3
@EmployeeIds= ISNULL (@EmployeeIds + ',', '') + CAST(ID AS VARCHAR(5))
≡ @EmployeeIds= ISNULL ('1' + ',', '') + '3' /*Substituting in variable and column values*/
≡ @EmployeeIds= ('1' + ',') + '3'
≡ @EmployeeIds= '1,3'
等等。这不是字符串连接的保证方法。它可以而且确实失败了,并且被Microsoft特别警告。
未来版本将包含STRING_AGG
功能。目前最好的选择是XML PATH