sp_scriptdynamicupdproc (Transact-SQL)
Si applica a: SQL Server
Genera l'istruzione CREATE PROCEDURE
che crea una stored procedure di aggiornamento dinamico. L'istruzione UPDATE
all'interno della stored procedure personalizzata viene compilata in modo dinamico in base alla MCALL
sintassi che indica quali colonne modificare. Utilizzare questa stored procedure se il numero di indici nella tabella di sottoscrizione è in aumento e il numero di colonne in fase di modifica è ridotto. Questa stored procedure viene eseguita nel database di pubblicazione del server di pubblicazione.
Convenzioni relative alla sintassi Transact-SQL
Sintassi
sp_scriptdynamicupdproc [ @artid = ] artid
[ ; ]
Argomenti
[ @artid = ] artifid
ID dell'articolo. @artid è int, senza impostazione predefinita.
Set di risultati
Restituisce un set di risultati costituito da una singola colonna nvarchar(4000). Il set di risultati costituisce l'istruzione completa CREATE PROCEDURE
utilizzata per creare la stored procedure personalizzata.
Osservazioni:
sp_scriptdynamicupdproc
viene usato nella replica transazionale. La logica di scripting predefinita MCALL
include tutte le colonne all'interno dell'istruzione UPDATE
e usa una bitmap per determinare le colonne modificate. Se una colonna non è stata modificata, la colonna viene impostata di nuovo su se stessa, che in genere non causa problemi. Se la colonna è indicizzata, sono necessari altri processi di elaborazione. L'approccio dinamico include solo le colonne modificate, che fornisce una stringa ottimale UPDATE
. Tuttavia, durante la compilazione dell'istruzione dinamica UPDATE
viene generata un'elaborazione aggiuntiva in fase di esecuzione. È consigliabile verificare gli approcci dinamico e statico e quindi scegliere la soluzione ottimale.
Autorizzazioni
Solo i membri del ruolo predefinito del server sysadmin o db_owner ruolo predefinito del database possono eseguire sp_scriptdynamicupdproc
.
Esempi
Questo esempio crea un articolo (con @artid impostato su 1
) nella authors
tabella del pubs
database e specifica che l'istruzione UPDATE
è la procedura personalizzata da eseguire: 'MCALL sp_mupd_authors'
.
Generare le stored procedure personalizzate che dovranno essere eseguite dall'agente di distribuzione nel Sottoscrittore mediante l'esecuzione della stored procedure seguente nel server di pubblicazione:
EXEC sp_scriptdynamicupdproc @artid = '1';
L'istruzione restituisce:
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 NVARCHAR(4000),
@spacer 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'
EXEC 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
EXEC sp_MSreplraiserror 20598;
Dopo avere eseguito questa stored procedure, è possibile utilizzare lo script risultante per creare manualmente la stored procedure nei Sottoscrittori.