在一条语句中选择并赋值给变量?

5

我想要显示查询结果,并同时捕获一列的值。在这两个查询中,FROMWHERE 都是相同的。我能否在一个查询中完成这两个操作,还是像下面这样两次执行查询更容易/更好?

DECLARE @fooId INT

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

SELECT * FROM Bar WHERE SnuhId = 5
3个回答

4

3
如果您尝试在一个查询中执行此操作,将会出现错误消息 - 不能将分配值给变量的SELECT语句与数据检索操作组合。 为了避免这种情况,有以下几种可能:
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语句。


1
+1 对于其他可能的选项,即使它们对我无效。真正的答案似乎是你不能这样做。 - Bob Horn

2
您可以通过以下方式减少一行代码:
DECLARE @fooI INT
SET @fooId = (SELECT FooId FROM Bar WHERE SnuhId = 5)
SELECT @fooId as [FooId]

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

我希望这能有所帮助。


2
这是准确的,但他想要从表中返回*,而不仅仅是分配的id值。 - Dave C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接