Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Область применения: SQL Server
Создает инструкцию CREATE PROCEDURE , которая создает хранимую процедуру динамического обновления. Инструкция UPDATE в пользовательской хранимой процедуре создается динамически на основе синтаксиса MCALL , указывающего, какие столбцы необходимо изменить. Следует использовать эту хранимую процедуру, если число индексов в таблице подписки увеличивается, а число изменяемых столбцов невелико. Эта хранимая процедура выполняется на издателе в базе данных публикации.
Соглашения о синтаксисе Transact-SQL
Синтаксис
sp_scriptdynamicupdproc [ @artid = ] artid
[ ; ]
Аргументы
[ @artid = ] artid
Идентификатор статьи. @artid не используется без значения по умолчанию.
Результирующий набор
Возвращает результирующий набор, состоящий из одного столбца nvarchar(4000). Результирующий набор формирует полную CREATE PROCEDURE инструкцию, используемую для создания пользовательской хранимой процедуры.
Замечания
sp_scriptdynamicupdproc используется в репликации транзакций. Логика сценариев по умолчанию включает все столбцы в UPDATE инструкции MCALL и использует растровое изображение для определения измененных столбцов. Если столбец не изменился, столбец возвращается к себе, что обычно не вызывает проблем. Если столбец является индексированным, выполняются дополнительные операции. Динамический подход включает только измененные столбцы, обеспечивающие оптимальную UPDATE строку. Однако дополнительная обработка возникает во время выполнения при построении динамической UPDATE инструкции. Рекомендуется протестировать динамический и статический подходы и выбрать оптимальное решение.
Разрешения
Могут выполняться только члены предопределенных ролей сервера sysadmin или db_owner предопределенных ролей базы данных.sp_scriptdynamicupdproc
Примеры
В этом примере создается статья (с @artid задано 1значение ) authors в таблице в pubs базе данных, и указывает, что UPDATE инструкция является пользовательской процедурой для выполнения: 'MCALL sp_mupd_authors'
Для формирования пользовательской хранимой процедуры, которая будет выполняться агентом распространителя на подписчике, на издателе необходимо выполнить следующую хранимую процедуру:
EXECUTE sp_scriptdynamicupdproc @artid = '1';
Инструкция возвращает следующие данные:
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;
После выполнения этой хранимой процедуры можно использовать получившийся в итоге скрипт для создания хранимой процедуры вручную на подписчиках.