从 Select 语句中为变量设置超过 1 个值
Set more than 1 value to variable from Select statement
我正在尝试像这样设置 varchar 变量:
DECLARE @var NVARCHAR(40)
set @var = (SELECT name from Tmptable AS name )
我想要这样的变量存储值:'name1,name2,name3,...'
此 returns 与标题中的错误类似:子查询返回了超过 1 个值。
我在函数的参数中使用了这个变量
Select *
Into Tmp2
FROM [dbo].[MyFunction](@var, DEFAULT) AS PARAM
.....
我知道我们不能在 variable.I 中放入多个值,需要通过将值拆分为“,”
来表示多个值的变量
这方面的任何注意事项
您可以使用 STUFF
和 FOR XML
:
DECLARE @var NVARCHAR(40)
Set @var =
(
SELECT Distinct Stuff((Select ',' + Name From Tmptable For Xml Path ('')), 1, 1, '')
From Tmptable
)
但是,理想情况下,您不应将逗号分隔值存储在 VARCHAR
中。使用 table 变量可能会更好:
Declare @Var Table
(
Name NVarchar (40)
)
Insert @Var (Name)
Select Name
From TmpTable
我正在尝试像这样设置 varchar 变量:
DECLARE @var NVARCHAR(40)
set @var = (SELECT name from Tmptable AS name )
我想要这样的变量存储值:'name1,name2,name3,...'
此 returns 与标题中的错误类似:子查询返回了超过 1 个值。
我在函数的参数中使用了这个变量
Select *
Into Tmp2
FROM [dbo].[MyFunction](@var, DEFAULT) AS PARAM
.....
我知道我们不能在 variable.I 中放入多个值,需要通过将值拆分为“,”
来表示多个值的变量这方面的任何注意事项
您可以使用 STUFF
和 FOR XML
:
DECLARE @var NVARCHAR(40)
Set @var =
(
SELECT Distinct Stuff((Select ',' + Name From Tmptable For Xml Path ('')), 1, 1, '')
From Tmptable
)
但是,理想情况下,您不应将逗号分隔值存储在 VARCHAR
中。使用 table 变量可能会更好:
Declare @Var Table
(
Name NVarchar (40)
)
Insert @Var (Name)
Select Name
From TmpTable