【问题标题】:Set more than 1 value to variable from Select statement从 Select 语句为变量设置超过 1 个值
【发布时间】: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 来生成分隔列表,但您很快就会回来询问如何拆分列表。有更好的选项,例如表值参数或许多其他选项,而不是分隔列表。
  • 有没有办法将 SQL Server 结果集(多行)转换为字符串
  • @AHiggins 我看看它感兴趣的链接

标签: sql sql-server tsql subquery


【解决方案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

【讨论】:

  • 别担心逗号,我有另一个函数可以根据逗号分割这个 VARCHAR。我会测试一下
猜你喜欢
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
相关资源
最近更新 更多