2016-02-08 41 views
0

我正在尝试设置这样的VARCHAR变量:设置多个值变量从Select语句

DECLARE @var NVARCHAR(40) 
set  @var = (SELECT name from Tmptable AS name) 

我想这个变量储值这样的:'name1,name2,name3,...' 这将返回像在一个错误标题:子查询返回的值超过1。

我在函数中使用这个变量放慢参数的

Select * 
Into Tmp2 
FROM [dbo].[MyFunction](@var, DEFAULT) AS PARAM 
..... 

我知道我们不能把超过一个variable.I值需要变量分裂的值来表示多个值“”

在这方面的任何方面

+0

将分隔数据存储在数据库中通常是一个坏主意。这意味着你必须将其分解回可用值。您可以使用FOR XML来生成您的分隔列表,但您很快会再次询问如何拆分列表。有更好的选项,如表值参数或许多其他选项,而不是分隔列表。 –

+0

可能重复[将多行连接成单个文本字符串?](http://stackoverflow.com/questions/194852/concatenate-many-rows-into-a-single-text-string) – AHiggins

+0

有没有办法将SQL Server结果集(多行)转换为字符串 – stoner

回答

1

可以使用STUFFFOR XML做到这一点:

DECLARE @var NVARCHAR(40) 
Set  @var = 
(
    SELECT Distinct Stuff((Select ',' + Name From Tmptable For Xml Path ('')), 1, 1, '') 
    From Tmptable 
) 

但是,理想情况下,您不应该将逗号分隔值存储在VARCHAR中。使用表变量可能会更好:

Declare @Var Table 
(
    Name NVarchar (40) 
) 

Insert @Var (Name) 
Select Name 
From TmpTable 
+0

不用担心逗号,我有另一个功能,根据comma.i'll测试分割此VARCHAR – stoner

相关问题