sys.sp_scriptdynamicupdproc (Transact-SQL)

Aplica-se a: 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 é construída dinamicamente com base na MCALL sintaxe que indica quais as colunas a alterar. Use este procedimento armazenado se o número de índices na tabela de subscrição estiver a crescer e o número de colunas a ser alteradas for pequeno. Este procedimento armazenado é executado no Publisher na base de dados de publicações.

Transact-SQL convenções de sintaxe

Sintaxe

sys.sp_scriptdynamicupdproc [ @artid = ] artid
[ ; ]

Arguments

[ @artid = ] artid

O ID do artigo. @artid é inteligência, sem padrão.

Conjunto de resultados

Devolve um conjunto de resultados que consiste numa única coluna nvarchar(4000). O conjunto de resultados constitui a instrução completa CREATE PROCEDURE usada para criar o procedimento armazenado personalizado.

Remarks

sp_scriptdynamicupdproc é usado na replicação transacional. A lógica de scripting padrão MCALL inclui todas as colunas dentro da UPDATE instrução e utiliza um bitmap para determinar as colunas que foram alteradas. Se uma coluna não mudou, a coluna volta a ser ela própria, o que normalmente não causa problemas. Se a coluna for indexada, ocorre processamento adicional. A abordagem dinâmica inclui apenas as colunas que mudaram, o que fornece uma cadeia ótima UPDATE . No entanto, há processamento extra em tempo de execução quando a instrução dinâmica UPDATE é construída. Recomendamos que teste as abordagens dinâmica e estática, e depois escolha a solução ótima.

Permissions

Apenas os membros do papel fixo de servidor administrador do sistema ou db_owner papel fixo de base de dados podem executar sp_scriptdynamicupdproc.

Exemplos

Este exemplo cria um artigo (com @artid definido para 1) na authors tabela da pubs base de dados, e especifica que a UPDATE instrução é o procedimento personalizado a executar: 'MCALL sp_mupd_authors'.

Gerar os procedimentos armazenados personalizados a serem executados pelo Distribution Agent no Assinante, executando o seguinte procedimento armazenado no Publisher:

EXECUTE sp_scriptdynamicupdproc @artid = '1';

A declaraçã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;

Após executar este procedimento armazenado, pode usar o script resultante para criar manualmente o procedimento armazenado nos Subscritores.