在一个语句中选择并分配给变量?

时间:2014-03-10 14:44:16

标签: sql sql-server tsql sql-server-2008-r2

我想显示查询结果,并且我想同时捕获列的值。 FROMWHERE在两个查询中都相同。我可以在一个查询中执行这两个操作,还是更容易/更好地执行两次查询,就像这样?

DECLARE @fooId INT

SET @fooId = (SELECT FooId FROM Bar WHERE SnuhId = 5)

SELECT * FROM Bar WHERE SnuhId = 5

3 个答案:

答案 0 :(得分:3)

不幸的是,它必须在两个操作中完成。

测试:

DECLARE @VAR DATETIME
SELECT @VAR=GETDATE(), GETDATE()

收益率错误消息141。

Here's another SO post on this.

答案 1 :(得分:3)

如果您尝试在一个查询中执行此操作,则会收到错误消息 - A SELECT statement that assigns a value to a variable must not be combined with data-retrieval operations.

为了避免这种情况,可能性是

1)确保将所有列分配给局部变量。实施例

DECLARE @fooId INT
DECLARE @barId INT

SELECT @fooId = FooId, @barId = BarId FROM Bar WHERE SnuhId = 5

2)只需从SELECT语句中删除'*'

SELECT @fooId = FooId, BarId FROM Bar WHERE SnuhId = 5 //remove BarId column from this query

3)如果你真的需要同时做两件事,意味着将值赋值给局部变量并将列作为结果集返回,则必须分两步完成,而不是将它们组合成一个SELECT语句。

答案 2 :(得分:1)

您可以执行以下操作以减少一行:

DECLARE @fooI INT
SET @fooId = (SELECT FooId FROM Bar WHERE SnuhId = 5)
SELECT @fooId as [FooId]

它将减少不必要的查询复制。

我希望这会有所帮助。