Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se: SQL Server
Gera a CREATE PROCEDURE instrução que cria um procedimento armazenado de atualização dinâmica. A UPDATE instrução dentro do procedimento armazenado personalizado é criada dinamicamente com base na sintaxe MCALL que indica quais colunas devem ser alteradas. Use esse procedimento armazenado se o número de índices na tabela de assinaturas estiver aumentando e o número de colunas alteradas for pequeno. Esse procedimento armazenado é executado no Publicador, no banco de dados de publicação.
Convenções de sintaxe de Transact-SQL
Sintaxe
sp_scriptdynamicupdproc [ @artid = ] artid
[ ; ]
Argumentos
@artid [ = ] artid
O ID do artigo. @artid é int, sem padrão.
Conjunto de resultados
Retorna um conjunto de resultados que consiste em uma única coluna nvarchar(4000). O conjunto de resultados forma a instrução completa CREATE PROCEDURE usada para criar o procedimento armazenado personalizado.
Comentários
sp_scriptdynamicupdproc é usado na replicação transacional. A lógica de script padrão MCALL inclui todas as colunas dentro da UPDATE instrução e usa um bitmap para determinar as colunas que foram alteradas. Se uma coluna não foi alterada, ela será definida de volta para si mesma, o que geralmente não causa problemas. Se a coluna for indexada, ocorrerá processamento extra. A abordagem dinâmica inclui apenas as colunas que foram alteradas, o que fornece uma cadeia de caracteres ideal UPDATE . No entanto, o processamento extra é incorrido no tempo de execução quando a instrução dinâmica UPDATE é criada. Recomendamos que você teste as abordagens dinâmica e estática e depois escolha a melhor solução.
Permissões
Somente membros da função de servidor fixa sysadmin ou db_owner função de banco de dados fixa podem executar sp_scriptdynamicupdproc.
Exemplos
Este exemplo cria um artigo (com @artid definido como 1) na authors tabela do pubs banco de dados e especifica que a UPDATE instrução é o procedimento personalizado a ser executado: 'MCALL sp_mupd_authors' .
Gera os procedimentos armazenados personalizados a serem executados pelo Distribution Agent no Assinante, executando o seguinte procedimento armazenado no Publicador:
EXECUTE sp_scriptdynamicupdproc @artid = '1';
A instrução retorna:
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;
Depois de executar esse procedimento armazenado, você pode usar o script resultante para criar o procedimento armazenado manualmente nos Assinantes.