我想显示查询结果,并且我想同时捕获列的值。 FROM
和WHERE
在两个查询中都相同。我可以在一个查询中执行这两个操作,还是更容易/更好地执行两次查询,就像这样?
DECLARE @fooId INT
SET @fooId = (SELECT FooId FROM Bar WHERE SnuhId = 5)
SELECT * FROM Bar WHERE SnuhId = 5
答案 0 :(得分:3)
不幸的是,它必须在两个操作中完成。
测试:
DECLARE @VAR DATETIME
SELECT @VAR=GETDATE(), GETDATE()
收益率错误消息141。
答案 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]
它将减少不必要的查询复制。
我希望这会有所帮助。