Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: SQL Server
Generiert die CREATE PROCEDURE Anweisung, die eine gespeicherte dynamische Aktualisierungsprozedur erstellt. Die UPDATE Anweisung innerhalb der benutzerdefinierten gespeicherten Prozedur wird dynamisch basierend auf der MCALL Syntax erstellt, die angibt, welche Spalten geändert werden sollen. Verwenden Sie diese gespeicherte Prozedur, wenn die Anzahl von Indizes für die Abonnementtabelle vergrößert wird und die Anzahl von zu ändernden Spalten klein ist. Diese gespeicherte Prozedur wird auf dem Verleger für die Veröffentlichungsdatenbank ausgeführt.
Transact-SQL-Syntaxkonventionen
Syntax
sp_scriptdynamicupdproc [ @artid = ] artid
[ ; ]
Argumente
[ @artid = ] artid
Die Artikel-ID. @artid ist "int" ohne Standard.
Resultset
Gibt ein Resultset zurück, das aus einer einzelnen nvarchar(4000)- Spalte besteht. Das Resultset bildet die vollständige CREATE PROCEDURE Anweisung, die zum Erstellen der benutzerdefinierten gespeicherten Prozedur verwendet wird.
Hinweise
sp_scriptdynamicupdproc wird in der Transaktionsreplikation verwendet. Die Standardmäßige MCALL Skriptlogik enthält alle Spalten in der UPDATE Anweisung und verwendet eine Bitmap, um die geänderten Spalten zu bestimmen. Wenn sich eine Spalte nicht geändert hat, wird die Spalte auf sich selbst zurückgesetzt, was in der Regel keine Probleme verursacht. Wenn die Spalte indiziert ist, entsteht zusätzlicher Verarbeitungsaufwand. Der dynamische Ansatz enthält nur die Spalten, die geändert wurden, was eine optimale UPDATE Zeichenfolge bietet. Beim Erstellen der dynamischen UPDATE Anweisung entsteht jedoch zur Laufzeit eine zusätzliche Verarbeitung. Es wird empfohlen, dass Sie das dynamische und statische Vorgehen testen und dann die bessere Lösung auswählen.
Berechtigungen
Nur Mitglieder der festen Serverrolle sysadmin oder db_owner feste Datenbankrolle können ausgeführt werden sp_scriptdynamicupdproc.
Beispiele
In diesem Beispiel wird ein Artikel (mit @artid auf ) in der Tabelle in der authors pubs Datenbank erstellt, und es wird angegeben, dass die UPDATE Anweisung die auszuführende benutzerdefinierte Prozedur ist: 'MCALL sp_mupd_authors'1
Generieren Sie die benutzerdefinierten gespeicherten Prozeduren, die der Verteilungs-Agent auf dem Abonnenten ausführen soll. Führen Sie hierzu die folgende gespeicherte Prozedur auf dem Verleger aus:
EXECUTE sp_scriptdynamicupdproc @artid = '1';
Die Anweisung gibt Folgendes zurück:
CREATE PROCEDURE [sp_mupd_authors] (@c1 VARCHAR (11),
@c2 VARCHAR (40),
@c3 VARCHAR (20),
@c4 CHAR (12),
@c5 VARCHAR (40),
@c6 VARCHAR (20),
@c7 CHAR (2),
@c8 CHAR (5),
@c9 BIT,
@pkc1 VARCHAR (11),
@bitmap BINARY (2))
AS
DECLARE @stmt AS NVARCHAR (4000), @spacer AS NVARCHAR (1);
SELECT @spacer = N'';
SELECT @stmt = N'UPDATE [authors] SET ';
IF SUBSTRING(@bitmap, 1, 1) & 2 = 2
BEGIN
SELECT @stmt = @stmt + @spacer + N'[au_lname]' + N'=@2';
SELECT @spacer = N',';
END
IF SUBSTRING(@bitmap, 1, 1) & 4 = 4
BEGIN
SELECT @stmt = @stmt + @spacer + N'[au_fname]' + N'=@3';
SELECT @spacer = N',';
END
IF SUBSTRING(@bitmap, 1, 1) & 8 = 8
BEGIN
SELECT @stmt = @stmt + @spacer + N'[phone]' + N'=@4';
SELECT @spacer = N',';
END
IF SUBSTRING(@bitmap, 1, 1) & 16 = 16
BEGIN
SELECT @stmt = @stmt + @spacer + N'[address]' + N'=@5';
SELECT @spacer = N',';
END
IF SUBSTRING(@bitmap, 1, 1) & 32 = 32
BEGIN
SELECT @stmt = @stmt + @spacer + N'[city]' + N'=@6';
SELECT @spacer = N',';
END
IF SUBSTRING(@bitmap, 1, 1) & 64 = 64
BEGIN
SELECT @stmt = @stmt + @spacer + N'[state]' + N'=@7';
SELECT @spacer = N',';
END
IF SUBSTRING(@bitmap, 1, 1) & 128 = 128
BEGIN
SELECT @stmt = @stmt + @spacer + N'[zip]' + N'=@8';
SELECT @spacer = N',';
END
IF SUBSTRING(@bitmap, 2, 1) & 1 = 1
BEGIN
SELECT @stmt = @stmt + @spacer + N'[contract]' + N'=@9';
SELECT @spacer = N',';
END
SELECT @stmt = @stmt + N' where [au_id] = @1';
EXECUTE sp_executesql @stmt, N'
@1 varchar(11), @2 varchar(40), @3 varchar(20), @4 char(12), @5 varchar(40),
@6 varchar(20), @7 char(2), @8 char(5), @9 bit', @pkc1, @c2, @c3, @c4, @c5, @c6, @c7, @c8, @c9;
IF @@rowcount = 0
IF @@microsoftversion > 0x07320000
EXECUTE sp_MSreplraiserror 20598;
Nach dem Ausführen dieser gespeicherten Prozedur können Sie den resultierenden Skriptcode zum manuellen Erstellen der gespeicherten Prozedur auf den Abonnenten verwenden.