Ich habe über die Unterschiede zwischen Tabellenvariablen und Temp Tabellen gelesen und stolperte über das folgende Problem mit der Tabellenvariable. Ich habe dieses Problem in den Artikeln, die ich verfolgt habe, nicht erwähnt.SQL Server 2005 Tabellenvariable Update Problem
Ich gebe eine Reihe von PKs über einen XML-Datentyp und erfolgreich erstellt die Datensätze in beiden Temp-Tabellenstrukturen. Wenn ich versuche, weitere Felder in den temporären Tabellen zu aktualisieren, schlägt die Tabellenvariable fehl, aber die Temp-Tabelle hat kein Problem mit der Aktualisierungsanweisung. Was muss anders gemacht werden? Ich möchte die Vorteile der Geschwindigkeit nehmen, dass die Tabelle Variables Versprechen steigern ...
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 in dort: die skalare Variable deklarieren muss „@ ERTableVariable ".
ExpenseReportProjectID wird in #ERTempTable aktualisiert, wenn das letzte Update heraus kommentiert:
Danke, ich werde das in meine Trickkiste legen ... –