sp_scriptdynamicupdproc (Transact-SQL)
Se aplica a: SQL Server
Genera la CREATE PROCEDURE
instrucción que crea un procedimiento almacenado de actualización dinámica. La UPDATE
instrucción dentro del procedimiento almacenado personalizado se compila dinámicamente en función de la MCALL
sintaxis que indica qué columnas se van a cambiar. Utilice este procedimiento almacenado si el número de índices de la tabla de suscripción va en aumento y el número de columnas modificadas es relativamente pequeño. Este procedimiento almacenado se ejecuta en el publicador de la base de datos de publicación.
Convenciones de sintaxis de Transact-SQL
Sintaxis
sp_scriptdynamicupdproc [ @artid = ] artid
[ ; ]
Argumentos
[ @artid = ] artid
Identificador del artículo. @artid es int, sin valor predeterminado.
Conjunto de resultados
Devuelve un conjunto de resultados que consta de una sola columna nvarchar(4000). El conjunto de resultados forma la instrucción completa CREATE PROCEDURE
que se usa para crear el procedimiento almacenado personalizado.
Comentarios
sp_scriptdynamicupdproc
se usa en la replicación transaccional. La lógica de scripting predeterminada MCALL
incluye todas las columnas de la UPDATE
instrucción y usa un mapa de bits para determinar las columnas que han cambiado. Si una columna no cambió, la columna se vuelve a establecer en sí misma, lo que normalmente no provoca ningún problema. Si la columna estuviera indizada, tendría lugar un procesamiento adicional. El enfoque dinámico incluye solo las columnas que han cambiado, lo que proporciona una cadena óptima UPDATE
. Sin embargo, se incurre en un procesamiento adicional en tiempo de ejecución cuando se compila la instrucción dinámica UPDATE
. Se recomienda probar los enfoques dinámico y estático y elegir la mejor solución.
Permisos
Solo los miembros del rol fijo de servidor sysadmin o db_owner rol fijo de base de datos pueden ejecutar sp_scriptdynamicupdproc
.
Ejemplos
En este ejemplo se crea un artículo (con @artid establecido en ) en la authors
tabla de la pubs
base de datos y se especifica que la UPDATE
instrucción es el procedimiento personalizado que se va a ejecutar: 'MCALL sp_mupd_authors'
.1
Genere los procedimientos almacenados personalizados que debe ejecutar el Agente de distribución en el suscriptor. Para hacerlo, ejecute el siguiente procedimiento almacenado en el publicador:
EXEC sp_scriptdynamicupdproc @artid = '1';
La instrucción devuelve:
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;
Una vez ejecutado este procedimiento almacenado, puede utilizar el script resultante para crear de forma manual el procedimiento almacenado en los suscriptores.