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

sha*_*oth 5 sql t-sql sql-server sql-server-2005 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;
Run Code Online (Sandbox Code Playgroud)

U定义如下:

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

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

Msg 208,Level 16,State 1,Line 24

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

我已经看过这个这个非常相似的问题,但无法弄清楚如何解决问题.

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

Jon*_*onH 9

你已经别名了@CurrentItems,CI所以只需使用CI:

UPDATE U SET U.Units = U.Units + CI.ItemUnits
    FROM @CurrentItems CI INNER JOIN U ON U.UId=CI.ItemId;
Run Code Online (Sandbox Code Playgroud)

另外看看你的查询,你有类似的东西U.UId = CU.ItemID.什么是CU?你已经用CI为@CurrentItems做了一个别名,那么CU的目的是什么?如果这是一个错误,只是一个错字请确保您更改任何参考CUCI.

你也不告诉我们是什么U,我希望这是一张有效的表格.

  • 我的错 - 我忘了从表变量名中删除`[]`.没有`[]`的工作. (2认同)