Mat*_*nes 36 sql t-sql sql-server sql-function
我有一个包含以下代码的sql函数:
DECLARE @CodeNameString varchar(100)
SELECT CodeName FROM AccountCodes ORDER BY Sort
Run Code Online (Sandbox Code Playgroud)
我需要将select查询中的所有结果连接到CodeNameString中.
显然,C#代码中的FOREACH循环会这样做,但我如何在SQL中执行此操作?
mar*_*c_s 83
如果您使用的是SQL Server 2005或更高版本,则可以使用此FOR XML PATH & STUFF技巧:
DECLARE @CodeNameString varchar(100)
SELECT
@CodeNameString = STUFF( (SELECT ',' + CodeName
FROM dbo.AccountCodes
ORDER BY Sort
FOR XML PATH('')),
1, 1, '')
Run Code Online (Sandbox Code Playgroud)
该FOR XML PATH('')基本符连接你的字符串连成一片,长XML结果(像,code1,code2,code3等)和STUFF上置"无"字的第一个字符,如抹了"多余的"第一个逗号,给你,你很可能结果寻找.
更新: OK -我理解的意见-如果你的数据库表中的文本中包含的字符,如<,>或&,然后我目前的解决方案实际上将这些编码成<,>和&.
如果您对XML编码有疑问 - 那么是的,您必须查看@KM提出的解决方案,该解决方案也适用于这些字符.我要提醒一句:这种方法需要更多的资源和处理密集 - 所以你知道.
Ale*_*rMP 25
DECLARE @CodeNameString varchar(max)
SET @CodeNameString=''
SELECT @CodeNameString=@CodeNameString+CodeName FROM AccountCodes ORDER BY Sort
SELECT @CodeNameString
Run Code Online (Sandbox Code Playgroud)
Jam*_*man 10
@ AlexanderMP的答案是正确的,但您也可以考虑使用以下方法处理空值coalesce:
declare @CodeNameString nvarchar(max)
set @CodeNameString = null
SELECT @CodeNameString = Coalesce(@CodeNameString + ', ', '') + cast(CodeName as varchar) from AccountCodes
select @CodeNameString
Run Code Online (Sandbox Code Playgroud)
对于 SQL Server 2005 及更高版本,请使用Coalesce for nulls,如果有,我将使用Cast 或 Convertnumeric values -
declare @CodeNameString nvarchar(max)
select @CodeNameString = COALESCE(@CodeNameString + ',', '') + Cast(CodeName as varchar) from AccountCodes ORDER BY Sort
select @CodeNameString
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
146009 次 |
| 最近记录: |