gpt4 book ai didi

sql-server - 连接SELECT查询的结果只返回一个值

转载 作者:行者123 更新时间:2023-12-01 06:50:43 25 4
gpt4 key购买 nike

我正在使用一个选择查询和一个变量来连接查询中的一些字符串,如下所示:

DECLARE @sConcat nvarchar(max)
SET @sConcat = ''
SELECT @sConcat = @sConcat + '[' + SomeColumn + ']'
FROM SomeTable
ORDER BY SomeColumn

在我的特殊情况下,我更改了 FROM子句到派生表,它只是将整数列转换为 nvarchar,这样我就不必每次在连接中出现时都将它转换。

进行此更改后,串联的结果是 表中只有一个值 .将 CAST 移动到外部查询时,或删除 ORDER BY 时条款,结果如预期。

这一切都可以用下面的 t-sql 来重现。
BEGIN TRAN

-- Create a dummy table and populate it with some values
CREATE TABLE TTest (
TTest_ID int IDENTITY(1,1) NOT NULL,
TTest_Text varchar(8) NOT NULL
CONSTRAINT PK_TTest PRIMARY KEY CLUSTERED (
TTest_Id ASC
)
) ON [PRIMARY]

INSERT INTO TTest (TTest_Text) VALUES ('A')
INSERT INTO TTest (TTest_Text) VALUES ('B')
INSERT INTO TTest (TTest_Text) VALUES ('C')
INSERT INTO TTest (TTest_Text) VALUES ('D')
INSERT INTO TTest (TTest_Text) VALUES ('E')
INSERT INTO TTest (TTest_Text) VALUES ('F')
INSERT INTO TTest (TTest_Text) VALUES ('G')
INSERT INTO TTest (TTest_Text) VALUES ('H')

-- Create a string with the ID values of each row in brackets
DECLARE @sConcat nvarchar(max)

-- First attempt, produces the result '[8]' which is not what I expected
SET @sConcat = ''
SELECT @sConcat = @sConcat + '[' + TTest_ID + ']'
FROM (SELECT CAST(TTest_ID AS nvarchar(100)) AS TTest_ID, TTest_Text
FROM TTest) TTestBis
ORDER BY TTestBis.TTest_ID ASC

PRINT @sConcat

-- Second attempt, with cast in the outer query,
-- produces the expected result '[1][2][3][4][5][6][7][8]'
SET @sConcat = ''
SELECT @sConcat = @sConcat + '[' + CAST(TTest_ID AS nvarchar(100)) + ']'
FROM (SELECT TTest_ID, TTest_Text
FROM TTest) TTestBis
ORDER BY TTestBis.TTest_ID ASC

PRINT @sConcat

-- Third attempt, same as first but without ORDER BY,
-- also produces the expected result '[1][2][3][4][5][6][7][8]'
SET @sConcat = ''
SELECT @sConcat = @sConcat + '[' + TTest_ID + ']'
FROM (SELECT CAST(TTest_ID AS nvarchar(100)) AS TTest_ID, TTest_Text
FROM TTest) TTestBis

PRINT @sConcat

ROLLBACK

为什么 SQL Server 会这样?对我来说这没有意义。我在 SQL Server 2005、2008 和 2008R2 上复制了这个。

编辑

这个问题确实是重复的。迄今为止给出的最佳答案似乎是 Martin Smith 的答案 in this question .所以你可以投票关闭。

最佳答案

这个问题确实是重复的。可以在以下 stackoverflow 问题中找到全面的答案:nvarchar concatenation / index / nvarchar(max) inexplicable behavior .

本文提供了几个有效的解决方案来解决在 SELECT 查询中连接字符串的问题:https://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/

关于sql-server - 连接SELECT查询的结果只返回一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18188430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com