如何将一列的结果放入字符串变量中?
How to put result of one column inside a string variable?
我尝试 select 行数,然后将它们放入字符串变量中,例如 1,2,3,4,5,
但出现此错误:
Subquery returned more than 1 value. This is not permitted when the
subquery follows =, !=, <, <= , >, >= or when the subquery is used as
an expression.
我使用 MSSQL SERVER
DECLARE @CodeNameString VARCHAR(MAX)
SELECT @CodeNameString = STUFF(
(
SELECT dbo.CharterReference.TicketNo+','
FROM dbo.CharterReference
),
1,
1,
''
)
SELECT @CodeNameString
我该如何解决这个问题?
基于 SQL 的解决方案要求您为此使用递归 SQL。语法通常是特定于 DBMS 的,并且根据您在示例中使用的语法进行猜测,O 相信您的引擎调用此功能 "recursive CTE".
另一种方法是将光标移到具有单个行的结果集上,并在您的客户端程序中构造字符串追加。
另一种选择是使用系统的 PL/SQL 方言。然后,您可以编写一个 SQL 过程,在该过程中您可以在结果集上进行游标并追加字符串。您可以将此 SQL 过程作为可调用模块公开给您的客户端程序。
如果你想要@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
Returns
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,'')
错误消息是抱怨,因为您返回了多行,而您这样做的方式是不允许的。
重新排列成看起来正常的 select 语句,然后去掉最后一个逗号可以解决这个问题:
DECLARE @CodeNameString VARCHAR(MAX);
set @CodeNameString = '';
SELECT @CodeNameString = TicketNo + ','
FROM dbo.CharterReference;
SELECT left(@CodeNameString, len(@CodeNameString)-1) as CodeNameString;
我尝试 select 行数,然后将它们放入字符串变量中,例如 1,2,3,4,5,
但出现此错误:
Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.
我使用 MSSQL SERVER
DECLARE @CodeNameString VARCHAR(MAX)
SELECT @CodeNameString = STUFF(
(
SELECT dbo.CharterReference.TicketNo+','
FROM dbo.CharterReference
),
1,
1,
''
)
SELECT @CodeNameString
我该如何解决这个问题?
基于 SQL 的解决方案要求您为此使用递归 SQL。语法通常是特定于 DBMS 的,并且根据您在示例中使用的语法进行猜测,O 相信您的引擎调用此功能 "recursive CTE".
另一种方法是将光标移到具有单个行的结果集上,并在您的客户端程序中构造字符串追加。
另一种选择是使用系统的 PL/SQL 方言。然后,您可以编写一个 SQL 过程,在该过程中您可以在结果集上进行游标并追加字符串。您可以将此 SQL 过程作为可调用模块公开给您的客户端程序。
如果你想要@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
Returns
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,'')
错误消息是抱怨,因为您返回了多行,而您这样做的方式是不允许的。
重新排列成看起来正常的 select 语句,然后去掉最后一个逗号可以解决这个问题:
DECLARE @CodeNameString VARCHAR(MAX);
set @CodeNameString = '';
SELECT @CodeNameString = TicketNo + ','
FROM dbo.CharterReference;
SELECT left(@CodeNameString, len(@CodeNameString)-1) as CodeNameString;