从 Select 语句为变量设置超过 1 个值
Posted
技术标签:
【中文标题】从 Select 语句为变量设置超过 1 个值【英文标题】:Set more than 1 value to variable from Select statement 【发布时间】:2016-02-08 18:49:16 【问题描述】:我正在尝试像这样设置 varchar 变量:
DECLARE @var NVARCHAR(40)
set @var = (SELECT name from Tmptable AS name )
我想要这样的变量存储值:'name1,name2,name3,...'
这将返回一个类似于标题中的错误:子查询返回超过 1 个值。
我在 on 函数的参数中使用了这个变量
Select *
Into Tmp2
FROM [dbo].[MyFunction](@var, DEFAULT) AS PARAM
.....
我知道我们不能在一个变量中放入多个值。我需要该变量通过将值拆分为“,”来表示多个值
关于这方面的任何方面
【问题讨论】:
在数据库中存储分隔数据通常是个坏主意。这意味着您必须将其拆分回可用值。您可以使用 FOR XML 来生成分隔列表,但您很快就会回来询问如何拆分列表。有更好的选项,例如表值参数或许多其他选项,而不是分隔列表。 Concatenate many rows into a single text string?的可能重复 有没有办法将 SQL Server 结果集(多行)转换为字符串 @AHiggins 我看看它感兴趣的链接 【参考方案1】:您可以使用STUFF
和FOR 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
【讨论】:
别担心逗号,我有另一个函数可以根据逗号分割这个 VARCHAR。我会测试一下以上是关于从 Select 语句为变量设置超过 1 个值的主要内容,如果未能解决你的问题,请参考以下文章
在与 CASE 一起使用 THEN 语句后返回超过 1 个值
如何在 Oracle SQL 中将变量设置为 select 语句的结果