Ich habe eine gespeicherte Prozedur, die einen ID-Parameter empfängt und Einfügevorgänge/Aktualisierungen durchführt.T-SQL: Prozedur zum Abrufen des Parameterwerts aus Tabelle ausführen (SQL Server 2012)
Ich habe etwa 25K Datensätze, die aktualisiert werden müssen, und ich habe versucht, eine Möglichkeit zur Verbesserung der einzelnen gespeicherten Parameterprozedur herauszufinden, so dass es mehrere Werte oder Mengen von IDs aus einer Tabelle verarbeiten kann.
Am nächsten komme ich dazu, indem ich einen Cursor erzeuge und während der Ausführung der Stored Procedure hindurchschleiche, leider habe ich erkannt, dass dies ein sehr langsamer Weg ist.
Ich fragte mich, ob ich Hilfe bekommen könnte, meine gespeicherte Prozedur zu ändern, damit sie eine bessere Leistung haben kann.
Hier ist mein Code, der einen Cursor verwendet.
SET NOCOUNT ON;
DECLARE @Id VARCHAR(32);
DECLARE csr CURSOR
FOR SELECT DISTINCT ID
FROM table
ORDER BY id;
OPEN csr;
FETCH NEXT FROM csr INTO
@Id;
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Running for '[email protected];
EXEC update_product_xml_single_id @Id;
FETCH NEXT FROM csr INTO
@Id;
END;
CLOSE csr;
DEALLOCATE csr;
UPDATE
Empfehlung ObjectNotFound gemacht Folgende:
--Create User-defined Table Type
CREATE TYPE IdTableType AS TABLE ([Id] VARCHAR(20) NOT NULL);
-- Modified old stored proc: update_product_xml_single_id, to receive the new type
CREATE PROCEDURE update_product_xml_tvp (@id IdTableType READONLY)
-- Called stored proc with a table variable
DECLARE @ID IdTableType
INSERT @ID
SELECT DISTINCT ID
FROM Products
WHERE ID LIKE 'N0%'
ORDER BY ID;
EXEC update_product_xml_tvp @ID
Das Problem, das ich bin vor ist mit der ursprünglichen gespeicherte Prozedur oder Schritt # 2. Das einzige, was ich änderte, war der Name und der Parametertyp, aber wenn ich versuche, die Änderungen zu speichern, erhalte ich Fehler wie:
Msg 137, Level 16, Status 1, Prozedur update_product_xml_tvp, Zeile 43 Muss den Skalar deklarieren Variable "@id".
Diese skalare Variable, über die sich die Nachricht beschweren, ist derselbe Parameter, den ich gerade von Varchar zu Tabellentyp geändert habe. Ich bin mir nicht sicher, wie ich hier vorgehen soll, oder ob ich die Schritte falsch gemacht habe. Jede Hilfe ist großartig, danke.
Vielen Dank objectNotFound, es ist ein bisschen verwirrend, wie ich die Änderungen in meinem Code implementieren soll Aber ich werde es versuchen. –
@erasmocarlos es ist ziemlich einfach vorwärts ... die letzten 3 Aussagen in dem Beispiel, das ich kopiere/klebte, sind außerhalb des SP. Ich werde den Beitrag bearbeiten, um das zu klären. – objectNotFound
der erste Abschnitt Schritt 2, warum ruft die Einfügung Daten aus einer Tabelle namens Location, und dann auf den letzten drei Anweisungen in der Einfügeanweisung, die TVP wird mit Daten aus einer anderen Tabelle aufgefüllt. –