2017-03-06 150 views
2

我儘量選擇行數,然後把它們放到字符串變量如1,2,3,4,5,但得到這個錯誤:如何將一列的結果放入字符串變量中?

子查詢返回多個值。當 子查詢遵循=,!=,<,< =,>,> =或當子查詢用作 表達式時,這是不允許的。

我使用MSSQL SERVER

DECLARE @CodeNameString VARCHAR(MAX) 

SELECT @CodeNameString = STUFF(
      (
       SELECT dbo.CharterReference.TicketNo+',' 
       FROM dbo.CharterReference 

      ), 
      1, 
      1, 
      '' 
     ) 

SELECT @CodeNameString 

我怎樣才能解決這個問題?

+1

您正在使用哪個數據庫管理系統?該代碼是特定於產品的。 – jarlh

+1

你可以參考這個:[SQL Server轉換選擇一列並將其轉換爲字符串](http://stackoverflow.com/questions/16193152/sql-server-convert-select-a-column-and-convert-它到字符串) –

+0

MSSQL服務器..... – programmer138200

回答

3

如果你想在@CharterReference的值,可以使用下面的

Declare @CharterReference table (TicketNo int) 
Insert Into @CharterReference values 
(1),(2),(3),(4),(5),(6),(7),(8) 

Declare @CodeNameString varchar(Max) = '>>>' 
Select @CodeNameString =replace(concat(@CodeNameString ,',',TicketNo),'>>>,','') 
From @CharterReference 
Where TicketNo between 1 and 5 
Order By TicketNo 

Select @CodeNameString 

返回

1,2,3,4,5 

或者你可以使用一些XML

Select @CodeNameString=Stuff((Select ',' +cast(TicketNo as varchar(25)) 
           From @CharterReference 
           Where TicketNo between 1 and 5 
           For XML Path ('') 
          ),1,1,'') 
+0

爲什麼你有沒有使用第一個選項。不確定它需要更換部件。它可以通過@BeanFrog共享完成。 – DK5

+1

@ DK5 >>>和替換是第一個逗號可以使用的東西,如果你寧願。第一種技術比XML Path有更多的可能性,例如標記字符串,動態映射等。 –

+0

好吧,我現在明白了。感謝您解釋:) – DK5

0

基於SQL的解決方案要求您爲此使用遞歸SQL。語法通常是特定於DBMS的,並且按照您在示例中使用的語法進行猜測,O相信您的引擎將此功能稱爲「遞歸CTE」。

另一種方法是將遊標放在結果集的各行上,並在客戶端程序中構造字符串追加。

另一種選擇是使用系統的PL/SQL方言。然後,您可以在結果集和字符串附加信息上編寫SQL過程。您可以將此SQL過程作爲可調用模塊公開給客戶端程序。

1

錯誤信息正在抱怨,因爲你有多行返回,這是不允許的,你已經完成這個。

重新安排到正常看SELECT語句,然後砍掉最後一個逗號之後會解決此問題:

DECLARE @CodeNameString VARCHAR(MAX); 
set @CodeNameString = ''; 

SELECT @CodeNameString = TicketNo + ',' 
FROM dbo.CharterReference; 

SELECT left(@CodeNameString, len(@CodeNameString)-1) as CodeNameString; 
相關問題