Как использовать переменную таблицы в запросе «обновить из выбора»? - PullRequest
5 голосов
/ 16 декабря 2011

У меня есть объявление таблицы с последующим запросом:

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, я получаю следующее:

Сообщение 208, Уровень 16, Состояние 1, Строка 24

Неверное имя объекта'@CurrentItems'.

Я уже просмотрел это и это очень похожие вопросы, но не могу понять, как решить проблему.

Какая на самом деле проблема и как мне ее решить?

1 Ответ

9 голосов
/ 16 декабря 2011

Вы связали @CurrentItems с CI, поэтому просто используйте 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?Вы создали псевдоним для @CurrentItems с помощью CI, так какова цель CU?Если это ошибка, просто опечатка, убедитесь, что вы изменили любую ссылку на CU с CI.

Вы также не говорите нам, что такое U, я надеюсь, что это правильная таблица.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...