Я читал о различиях между переменными таблицы и временными таблицами и наткнулся на следующую проблему с переменной таблицы. Я не видел эту проблему, упомянутую в статьях, которые я преследовал.
Я передаю серию PK через тип данных XML и успешно создаю записи в обеих структурах временных таблиц. Когда я пытаюсь обновить другие поля во временных таблицах, переменная таблицы не выполняется, но у временной таблицы нет проблем с оператором обновления. Что нужно делать по-другому? Я хотел бы воспользоваться ускорением, которое обещают переменные таблицы ...
Вот фрагменты и результаты SP:
CREATE PROCEDURE ExpenseReport_AssignApprover
(
@ExpenseReportIDs XML
)
AS
DECLARE @ERTableVariable TABLE ( ExpenseReportID INT,
ExpenseReportProjectID INT,
ApproverID INT)
CREATE TABLE #ERTempTable
(
ExpenseReportID INT,
ExpenseReportProjectID INT,
ApproverID INT
)
INSERT INTO @ERTableVariable (ExpenseReportID)
SELECT ParamValues.ID.value('.','VARCHAR(20)')
FROM @ExpenseReportIDs.nodes('/Root/ExpenseReportID') as ParamValues(ID)
INSERT INTO #ERTempTable (ExpenseReportID)
SELECT ParamValues.ID.value('.','VARCHAR(20)')
FROM @ExpenseReportIDs.nodes('/Root/ExpenseReportID') as ParamValues(ID)
UPDATE #ERTempTable
SET ExpenseReportProjectID = ( SELECT TOP 1 ExpenseReportProjectID
FROM ExpenseReportItem
WHERE(ExpenseReportID = #ERTempTable.ExpenseReportID))
UPDATE @ERTableVariable
SET ExpenseReportProjectID = ( SELECT TOP 1 ExpenseReportProjectID
FROM ExpenseReportItem
WHERE(ExpenseReportID = @ERTableVariable.ExpenseReportID))
Ошибка при последнем обновлении оператора:
Необходимо объявить скалярную переменную "@ERTableVariable".
ExpenseReportProjectID обновляется в #ERTempTable, когда последнее обновление закомментировано: