sp_scriptdynamicupdproc (Transact-SQL)
S’applique à : SQL Server
Génère l’instruction CREATE PROCEDURE
qui crée une procédure stockée de mise à jour dynamique. L’instruction UPDATE
dans la procédure stockée personnalisée est générée dynamiquement en fonction de la MCALL
syntaxe qui indique les colonnes à modifier. Utilisez cette procédure stockée si le nombre d’index dans la table d’abonnement augmente et si le nombre de colonnes modifiées est limité. Cette procédure stockée est exécutée sur la base de données de publication du serveur de publication.
Conventions de la syntaxe Transact-SQL
Syntaxe
sp_scriptdynamicupdproc [ @artid = ] artid
[ ; ]
Arguments
[ @artid = ] artid
Identificateur de l'article. @artid est int, sans valeur par défaut.
Jeu de résultats
Retourne un jeu de résultats constitué d’une seule colonne nvarchar(4000). Le jeu de résultats forme l’instruction complète CREATE PROCEDURE
utilisée pour créer la procédure stockée personnalisée.
Notes
sp_scriptdynamicupdproc
est utilisé dans la réplication transactionnelle. La logique de script par défaut MCALL
inclut toutes les colonnes de l’instruction UPDATE
et utilise une bitmap pour déterminer les colonnes qui ont changé. Si une colonne n’a pas changé, la colonne est définie sur elle-même, ce qui ne provoque généralement aucun problème. Si la colonne est indexée, un traitement supplémentaire intervient. L’approche dynamique inclut uniquement les colonnes qui ont changé, ce qui fournit une chaîne optimale UPDATE
. Toutefois, un traitement supplémentaire est généré au moment de l’exécution lorsque l’instruction dynamique UPDATE
est générée. Nous vous recommandons de tester les approches dynamique et statique, puis d'opter pour la meilleure solution.
autorisations
Seuls les membres du rôle serveur fixe sysadmin ou db_owner rôle de base de données fixe peuvent s’exécuter sp_scriptdynamicupdproc
.
Exemples
Cet exemple crée un article (avec @artid défini sur 1
) sur la table de la authors
pubs
base de données et spécifie que l’instruction UPDATE
est la procédure personnalisée à exécuter : 'MCALL sp_mupd_authors'
.
Générez les procédures stockées personnalisées, que doit exécuter l'Agent de distribution au niveau de l’Abonné, en exécutant la procédure stockée suivante au niveau du serveur de publication :
EXEC sp_scriptdynamicupdproc @artid = '1';
L’instruction retourne ceci :
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;
Après avoir exécuté cette procédure stockée, vous pouvez utiliser le script résultant pour créer manuellement la procédure stockée au niveau des Abonnés.