我想要显示查询结果,并同时捕获一列的值。在这两个查询中,FROM
和 WHERE
都是相同的。我能否在一个查询中完成这两个操作,还是像下面这样两次执行查询更容易/更好?
DECLARE @fooId INT
SET @fooId = (SELECT FooId FROM Bar WHERE SnuhId = 5)
SELECT * FROM Bar WHERE SnuhId = 5
我想要显示查询结果,并同时捕获一列的值。在这两个查询中,FROM
和 WHERE
都是相同的。我能否在一个查询中完成这两个操作,还是像下面这样两次执行查询更容易/更好?
DECLARE @fooId INT
SET @fooId = (SELECT FooId FROM Bar WHERE SnuhId = 5)
SELECT * FROM Bar WHERE SnuhId = 5
很不幸,它必须分两步操作完成。
测试:
DECLARE @VAR DATETIME
SELECT @VAR=GETDATE(), GETDATE()
出现错误消息141。
不能将分配值给变量的SELECT语句与数据检索操作组合。
为了避免这种情况,有以下几种可能: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语句。
DECLARE @fooI INT
SET @fooId = (SELECT FooId FROM Bar WHERE SnuhId = 5)
SELECT @fooId as [FooId]
它将减少您的查询的不必要复制。
我希望这能有所帮助。