SQL Server 2005-Tabelle die Variable-Update-Problem

Habe ich gelesen über die Unterschiede zwischen Table-Variablen und temporäre Tabellen und stolperte dabei über das folgende Problem mit der Table-Variablen. Ich habe dieses Problem nicht erwähnt in den Artikeln, die ich verfolgte.

Ich pass in eine Reihe von PKs über eine XML-Datentyp und erfolgreich erstellen Sie die Datensätze in die beiden temp-Tabellen-Strukturen. Wenn ich versuche zu aktualisieren, weitere Felder in der temp-Tabellen Tabelle Variable nicht aber die Temp-Tabelle hat kein problem mit der Update-Anweisung. Was muss anders machen? Ich möchte, um die Vorteile der Geschwindigkeit zu steigern, die Table-Variablen Versprechen...

Hier sind die SP-Schnipsel und Ergebnisse:

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))

Fehler beim letzten update-Anweisung dort :
Erklären müssen die Skalare variable "@ERTableVariable".

ExpenseReportProjectID aktualisiert in #ERTempTable, wenn das Letzte update ist auskommentiert:

Schreibe einen Kommentar