假设我们在SQLServer-2005中有一个包含两列和以下数据行的下表:
Tiger 50
Wolf 4
Tiger 53
Lion 55
Elephant 54
Rhino 52
Lion 5
我们是否可以得到如下结果的SQL查询:Tiger,Wolf,Lion,Elephant,Rhino
作为单个字符串varchar输出?是否可能?
使用T-SQL不可能单独使用执行标量的结果在c#中使用结果
提前谢谢。
答案 0 :(得分:3)
您可以使用for xml path
来连接值:
select distinct name + ', ' as [text()]
from @t
for xml path('')
-->
Elephant, Lion, Rhino, Tiger, Wolf,
如果你不喜欢尾随,
,那么最后2个字节的字符串。
不确定为什么你不能使用T-SQL,你可以将它与ExecuteScalar()结合使用就好了。
示例数据:
declare @t table (name varchar(max), id int)
insert into @t
select 'Tiger', 50
union all select 'Wolf', 4
union all select 'Tiger', 53
union all select 'Lion', 55
union all select 'Elephant', 54
union all select 'Rhino', 52
union all select 'Lion', 5
答案 1 :(得分:1)
答案 2 :(得分:0)
假设您是从ExecuteScalar获取此函数并在C#中使用生成的复合字符串,那么您将最终编写一个sproc,或者只是让您的代码使用数据表。
您能否详细说明为什么不能使用sproc?已经提供了一些可以很好的例子,你仍然可以得到你的标量结果
答案 3 :(得分:0)
将GROUP_CONCAT()与DISTINCT:
一起使用SELECT GROUP_CONCAT(DISTINCT colName) FROM tblName;
答案 4 :(得分:0)
最有效的方法可能是使用User-Defined Aggregate,但您也可以滥用UPDATE
声明:
DECLARE @Result varchar(500)
SET @Result = ''
UPDATE Animals
SET @Result = @Result + Name + ','
SELECT @Result
答案 5 :(得分:0)
这就是Andomar的答案的实施方式。感谢Andomar的回答得到了一些新的东西。
选择不同的summaryColumn +',' 作为[table()的[text()] xml路径('')