Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoyEste explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
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
sp_scriptdynamicupdproc [ @artid = ] artid
[ ; ]
Identificador del artículo. @artid es int, sin valor predeterminado.
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.
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.
Solo los miembros del rol fijo de servidor sysadmin o db_owner rol fijo de base de datos pueden ejecutar sp_scriptdynamicupdproc
.
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.
Eventos
31 mar, 23 - 2 abr, 23
Evento de aprendizaje de SQL, Fabric y Power BI más grande. 31 de marzo – 2 de abril. Use el código FABINSIDER para ahorrar $400.
Regístrate hoy