2016-02-08 43 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

相關問題