sp_scriptdynamicupdproc (Transact-SQL)sp_scriptdynamicupdproc (Transact-SQL)

S’APPLIQUE À : ouiSQL Server nonAzure SQL Database nonAzure SQL Data Warehouse nonParallel Data Warehouse APPLIES TO: yesSQL Server noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Génère l’instruction CREATE PROCEDURE qui crée une procédure stockée de mise à jour dynamique.Generates the CREATE PROCEDURE statement that creates a dynamic update stored procedure. L'instruction UPDATE dans la procédure stockée personnalisée est créée dynamiquement en fonction de la syntaxe MCALL qui indique les colonnes devant être modifiées.The UPDATE statement within the custom stored procedure is built dynamically based on the MCALL syntax that indicates which columns to change. 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é.Use this stored procedure if the number of indexes on the subscribing table is growing and the number of columns being changed is small. Cette procédure stockée est exécutée sur la base de données de publication du serveur de publication.This stored procedure is run at the Publisher on the publication database.

Icône de lien de rubrique Conventions de la syntaxe Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SyntaxeSyntax

  
sp_scriptdynamicupdproc [ @artid =] artid  

ArgumentsArguments

[ @artid = ] artid Est l’ID d’article.[ @artid = ] artid Is the article ID. artid est int, sans valeur par défaut.artid is int, with no default.

Jeux de résultatsResult Sets

Retourne un jeu de résultats qui se compose d’un seul nvarchar (4000) colonne.Returns a result set that consists of a single nvarchar(4000) column. L'ensemble de résultats forme l’instruction CREATE PROCEDURE complète qui permet de créer la procédure stockée personnalisée.The result set forms the complete CREATE PROCEDURE statement used to create the custom stored procedure.

NotesRemarks

sp_scriptdynamicupdproc est utilisé dans la réplication transactionnelle.sp_scriptdynamicupdproc is used in transactional replication. La logique de script MCALL par défaut inclut toutes les colonnes dans l'instruction UPDATE et utilise une image bitmap pour déterminer les colonnes qui ont changé.The default MCALL scripting logic includes all columns within the UPDATE statement and uses a bitmap to determine the columns that have changed. Si une colonne n'a pas changé, elle est rétablie, ce qui ne cause généralement aucun problème.If a column did not change, the column is set back to itself, which usually causes no problems. Si la colonne est indexée, un traitement supplémentaire intervient.If the column is indexed, extra processing occurs. L'approche dynamique inclut uniquement les colonnes qui ont changé, ce qui fournit une chaîne UPDATE optimale.The dynamic approach includes only the columns that have changed, which provides an optimal UPDATE string. Toutefois, un traitement supplémentaire a lieu pendant la phase d’exécution lors de la génération de l’instruction UPDATE dynamique.However, extra processing is incurred at runtime when the dynamic UPDATE statement is built. Nous vous recommandons de tester les approches dynamique et statique, puis d'opter pour la meilleure solution.We recommend that you test the dynamic and static approaches, and then choose the optimal solution.

AutorisationsPermissions

Seuls les membres de la sysadmin rôle serveur fixe ou db_owner rôle de base de données fixe peuvent exécuter sp_scriptdynamicupdproc.Only members of the sysadmin fixed server role or db_owner fixed database role can execute sp_scriptdynamicupdproc.

ExemplesExamples

Cet exemple crée un article (avec artid définie sur 1) sur le auteurs table dans le pubs de base de données et spécifie que la mise à jour instruction est la procédure personnalisée à exécuter :This example creates an article (with artid set to 1) on the authors table in the pubs database and specifies that the UPDATE statement is the custom procedure to execute:

'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 :Generate the custom stored procedures to be executed by the Distribution Agent at the Subscriber by running the following stored procedure at the Publisher:

EXEC sp_scriptdynamicupdproc @artid = '1'  
  
The statement returns:  
  
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.After running this stored procedure, you can use the resulting script to create the stored procedure manually at the Subscribers.

Voir aussiSee Also

Procédures stockées système (Transact-SQL)System Stored Procedures (Transact-SQL)