Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL逗号分隔值与合并_Sql Server_Coalesce - Fatal编程技术网

Sql server SQL逗号分隔值与合并

Sql server SQL逗号分隔值与合并,sql-server,coalesce,Sql Server,Coalesce,我的问题是: DECLARE @Groups VARCHAR(MAX) SELECT @Groups = COALESCE(@Groups + ',', '') + CONVERT(VARCHAR(5), GroupID) FROM [dbo].[tblGroups] PRINT @Groups 这是回报 2345,6543,7854 我希望@Groups返回'2345','6543','7854',因为我需要在另一个查询中使用@Groups

我的问题是:

DECLARE @Groups VARCHAR(MAX)

SELECT 
    @Groups = COALESCE(@Groups + ',', '') + CONVERT(VARCHAR(5), GroupID)
FROM  
    [dbo].[tblGroups]

PRINT @Groups
这是回报

            2345,6543,7854
我希望
@Groups
返回'2345','6543','7854',因为我需要在另一个查询中使用
@Groups

SELECT *   
FROM MyTable
WHERE GROUP_ID IN (@Groups)
我得到一个错误:

Msg 245,第16级,状态1,第25行
将varchar值“234565437854”转换为数据类型int时,转换失败

目前,我正在SQL Server中测试第二个查询并得到此错误,但实际上我必须在teradata中运行第二个查询,并且必须传递来自SQL Server的查询1结果
@Groups
)。我想,如果我能够将
@Groups
返回为'2345'、'6543'、'7854',应该可以解决我的问题


请指导如何实现这一点

或者改用表变量

DECLARE @Groups TABLE (Groups VARCHAR(MAX))
INSERT INTO @Groups
SELECT CONVERT(VARCHAR(5),GroupID)
FROM [dbo].[tblGroups]

SELECT * FROM MyTable
WHERE GROUP_ID IN (SELECT *
                   FROM @Groups)
***********************编辑***********************

DECLARE @Groups VARCHAR(MAX)
SELECT
    @Groups = COALESCE(@Groups + ',', '''') + CONVERT(VARCHAR(15), GroupID) + ''''
FROM  
    [dbo].[tblGroups]

PRINT @Groups
****编辑****

DECLARE @Tab TABLE (GroupID INT)
INSERT INTO @Tab
VALUES (2345),(6543),(7854)
DECLARE @Groups VARCHAR(MAX)
SELECT
    @Groups = COALESCE(@Groups + ',', '') +''''+ CONVERT(VARCHAR(5), GroupID) + ''''
FROM @Tab
SELECT @Groups
结果:

'2345','6543','7854'

无论如何,这可能行不通。创建一个子查询从TBGOUPSTAT检索数据不是更好吗?这与OP POST的逻辑不同,因为它只是复制表变量中TBLGROUP中的行,而不是使用不受支持的技巧使用聚合连接字符串。更重要的是,为什么?正如@Simon所建议的,更好的方法是直接进行子查询(或连接)-无需重复。。。我。。。这是我写得最快的一篇文章,也是我看到OP试图使用变量时想到的第一件事。西蒙在我发布我的答案之前发表了这一评论。。问题是查询1在SQL server中,查询2在Teradata中@组将通过一个进程作为变量传递给Teradata。所以不能使用子查询或表变量。如果这有助于理解我的问题,让我重新表述我的问题-此查询如何返回逗号分隔的值?结果不必在变量中,从[dbo].[tblGroups]@bjones中选择不同的GroupID,我已经尝试过了。没有正确地给每个数字加引号