假设我有一个名为tblContractMail
的表。样本表包含以下数据:
我需要编写一个产生以下输出的SQL查询:
'abc@akij.net; efg@akij.net; hjk@akij.net'
我知道两种可能性:
DECLARE @str varchar(4000)
SELECT @str = COALESCE(@str + ';', '') + strContract FROM tblContractMail
SELECT @str
和
DECLARE @str varchar(4000)
SET @str = (SELECT strContract + ';' FROM tblContractMail FOR XML PATH(''))
SET @str = SUBSTRING(@str, 1, LEN(@str)-1)
SELECT @str
有没有办法在单个查询中获取此输出(我的意思是没有声明任何变量)?
答案 0 :(得分:5)
第一种方法依赖于变量,因此第一种方法的答案是 no 。
但是你可以在没有变量的情况下轻松使用第二种方法,只需要稍微修改一下:
SELECT
SUBSTRING(
(SELECT ';' + strContract FROM tblContractMail FOR XML PATH('')),
2,
2147483647
)
如您所见,分隔符之前项目。结果,您开始从第二个字符切割字符串,省略前导分号。长度说明符不必精确地为长度减去1,您可以指定任何相当大的数字,并且该函数将返回从第二个字符到结尾的所有内容。在这种情况下,已指定最大int
值。