【发布时间】:2014-12-20 03:22:24
【问题描述】:
我正在寻找从行集上的子选择查询中检索值,其中我只想要主查询的当前行中的值(SQL Server 版本 2005-2012 显示了相同的行为)。我编写了一个返回多行的子选择查询(HOW,我在主键上匹配?!)
以下示例代码说明了我要完成的工作:
CREATE TABLE [dbo].[TestTable]
(
[TestID] [int] IDENTITY(1,1) NOT NULL,
[TestValue] [nvarchar](255) NULL,
[TestValue2] [nvarchar](255) NULL,
[TestValue3] [nvarchar](255) NULL,
[TestValue4] [nvarchar](255) NULL,
PRIMARY KEY CLUSTERED ([TestID] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT INTO [TESTDB].[dbo].[TestTable] ([TestValue], [TestValue2], [TestValue3],[TestValue4])
VALUES('01234', '56789', '98765', '43210')
GO
INSERT INTO [TESTDB].[dbo].[TestTable] ([TestValue], [TestValue2], [TestValue3],[TestValue4])
VALUES('01234', '98765', '56789', '43210')
GO
INSERT INTO [TESTDB].[dbo].[TestTable] ([TestValue], [TestValue2], [TestValue3],[TestValue4])
VALUES('01234', '43210', '56789' ,'98765')
GO
INSERT INTO [TESTDB].[dbo].[TestTable] ([TestValue], [TestValue2], [TestValue3],[TestValue4])
VALUES('01234', '98765', '43210', '56789')
GO
SELECT TOP 1000
[TestID]
,[TestValue]
,[TestValue2]
,[TestValue3]
,(SELECT TestValue + TestValue2 AS CompositeValue
FROM [TESTDB].[dbo].TestTable AS foo
WHERE foo.TestID = TestID)
FROM
[TESTDB].[dbo].[TestTable]
返回的错误是:
消息 512,第 16 级,状态 1,第 2 行
子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。
如果您可以提供执行此查询的替代方法 - 即使用 ROW_NUMBER 或其他方法(无需对临时表执行选择,也无需声明单个变量)。
提前致谢!
【问题讨论】:
标签: sql-server sql-server-2008 tsql sql-server-2005 sql-server-2012