如何在“从select更新”查询中使用表变量?

时间:2011-12-16 14:09:56

标签: sql sql-server sql-server-2005 tsql table-variable

我有这个表变量声明后跟一个查询:

DECLARE @CurrentItems TABLE
(
    ItemId uniqueidentifier,
    ItemUnits int
)

UPDATE U SET U.Units = U.Units + [@CurrentItems].ItemUnits
    FROM @CurrentItems CI INNER JOIN U ON U.UId=CI.ItemId;

U的定义如下:

CREATE TABLE [dbo].[U] (
    [UId]         UNIQUEIDENTIFIER UNIQUE NOT NULL,
    [Units]       INT DEFAULT ((0)) NOT NULL
);

当我在SQL Management Studio中针对SQL Server 2005 Express运行时,我得到以下内容:

  

Msg 208,Level 16,State 1,Line 24

     

无效的对象名称'@CurrentItems'。

我已经查看了thisthis非常相似的问题,但无法弄清楚如何解决问题。

实际问题是什么?如何解决?

1 个答案:

答案 0 :(得分:9)

您已将@CurrentItemsCI别名,因此请使用CI

UPDATE U SET U.Units = U.Units + CI.ItemUnits
    FROM @CurrentItems CI INNER JOIN U ON U.UId=CI.ItemId;

另请查看您的查询,例如U.UId = CU.ItemID。什么是CU?你已经用CI为@CurrentItems做了一个别名,那么CU的目的是什么?如果这是一个错误,只需输入错误,请确保使用CU更改对CI的任何引用。

您也没有告诉我们U是什么,我希望这是一张有效的表格。