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 authorspubs 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.