问题
I have this table variable declaration followed by a query:
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;
And U
is defined as follows:
CREATE TABLE [dbo].[U] (
[UId] UNIQUEIDENTIFIER UNIQUE NOT NULL,
[Units] INT DEFAULT ((0)) NOT NULL
);
When I run that in SQL Management Studio against SQL Server 2005 Express I get the following:
Msg 208, Level 16, State 1, Line 24
Invalid object name '@CurrentItems'.
I've already looked through this and this very similar questions but can't figure out how to solve the problem.
What's the actual problem and how do I resolve that?
回答1:
You've aliased @CurrentItems
with CI
so just use CI
:
UPDATE U SET U.Units = U.Units + CI.ItemUnits
FROM @CurrentItems CI INNER JOIN U ON U.UId=CI.ItemId;
Also take a look at your query you have something like U.UId = CU.ItemID
. What is CU? You've made an alias for @CurrentItems with CI, so what is the purpose of CU? If this is a mistake, just a typo make sure you change any reference to CU
with CI
.
You also don't tell us what U
is, I hope this is a valid table.
来源:https://stackoverflow.com/questions/8535362/how-to-use-a-table-variable-in-an-update-from-select-query