Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Generuje příkaz, CREATE PROCEDURE který vytváří uloženou proceduru dynamické aktualizace. Příkaz UPDATE v rámci vlastní uložené procedury je dynamicky vytvořen na základě syntaxe MCALL , která určuje, které sloupce změnit. Použijte tento uložený postup, pokud počet indexů v tabulce odběru roste a počet změněných sloupců je malý. Tato uložená procedura se spouští u Publisher v databázi publikací.
Syntax
sys.sp_scriptdynamicupdproc [ @artid = ] artid
[ ; ]
Arguments
[ @artid = ] Artid
ID článku. @artid je int, bez výchozího nastavení.
Sada výsledků
Vrátí množinu výsledků, která se skládá z jednoho sloupce nvarchar(4000). Výsledná sada tvoří kompletní příkaz použitý CREATE PROCEDURE k vytvoření vlastní uložené procedury.
Remarks
sp_scriptdynamicupdproc se používá v transakční replikaci. Výchozí MCALL skriptovací logika zahrnuje všechny sloupce ve příkazu UPDATE a používá bitmapu k určení sloupců, které se změnily. Pokud se sloupec nezměnil, sloupec se vrátí zpět do původního postavení, což obvykle nezpůsobuje žádné problémy. Pokud je sloupec indexován, dochází k dalšímu zpracování. Dynamický přístup zahrnuje pouze sloupce, které se změnily, což poskytuje optimální UPDATE řetězec. Nicméně při sestavování dynamického příkazu UPDATE dochází k dodatečnému zpracování. Doporučujeme otestovat dynamické a statické přístupy a poté zvolit optimální řešení.
Permissions
Pouze členové role pevného serveru správce systému nebo role pevné databáze db_owner mohou vykonávat sp_scriptdynamicupdproc.
Examples
Tento příklad vytváří článek (s @artid nastaveným na 1) v tabulce authors v pubs databázi a specifikuje, že UPDATE příkaz je vlastní procedura pro vykonání: 'MCALL sp_mupd_authors'.
Vygenerujte vlastní uložené procedury, které vykoná Distribution Agent u odběratele spuštěním následující uložené procedury na Publisher:
EXECUTE sp_scriptdynamicupdproc @artid = '1';
Příkaz vrátí:
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;
Po spuštění této uložené procedury můžete použít výsledný skript k ručnímu vytvoření uložené procedury u Subscribers.
Související obsah
- uložené procedury systému (Transact-SQL)