sp_scriptdynamicupdproc (języka Transact-SQL)

Generuje instrukcja CREATE PROCEDURE, która tworzy procedura składowana aktualizacji dynamicznej.Instrukcja UPDATE w ramach procedura składowana niestandardowe jest tworzona dynamicznie na podstawie składni MCALL, która wskazuje, które kolumny, aby zmienić.Ta procedura składowana rośnie liczba indeksów w tabela subskrypcji i liczba kolumn, zmianie jest mała.Ta procedura składowana jest uruchamiane w Wydawca na bazie publikacja.

Ikona łącza do tematuKonwencje składni Transact-SQL

Składnia

sp_scriptdynamicupdproc [ @artid =] artid

Argumenty

  • [ @ artid = artid
    Is the article ID.artid is int, with no default.

Zestawy wyników

Zwraca zestaw wyników, które składa się z pojedynczego nvarchar(4000) kolumna.Zestaw wyników formularzy całą procedurę tworzenia instrukcja używany do tworzenia niestandardowych procedura składowana.

Uwagi

sp_scriptdynamicupdproc w replikacja transakcyjna.Domyślnej logiki wykonywanie skryptów MCALL zawiera wszystkie kolumny w instrukcja UPDATE i używa bitmapy, aby określić kolumny, które uległy zmianie.Jeśli kolumna nie została zmieniona, kolumna jest zestaw do siebie, które zazwyczaj nie powoduje problemów.Jeśli kolumna jest indeksowana, występuje dodatkowe przetwarzania.Dynamicznej podejście obejmuje tylko kolumny, które uległy zmianie, co zapewnia optymalną ciąg aktualizacji.Jednakże dodatkowe przetwarzanie jest poniesionych w czasie wykonywania dynamicznych instrukcja UPDATE jest wbudowana.Zaleca się, aby przetestować podejścia dynamicznych i statycznych i wybierz najlepszego rozwiązania.

Uprawnienia

Tylko członkowie sysadmin stała rola serwera lub db_owner ustaloną rola bazy danych można wykonać sp_scriptdynamicupdproc.

Przykłady

W tym przykładzie tworzony artykuł (z artid zestaw do 1) na autorzy tabela w pubs bazy danych i określa niestandardowe procedury wykonywania instrukcja UPDATE:

'MCALL sp_mupd_authors'

Generowanie niestandardowych procedur przechowywanych do wykonania przez agenta dystrybucji subskrybent uruchamiając następującą procedura składowana w Wydawca:

EXEC sp_scriptdynamicupdproc @artid = '1'

The statement returns:

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

Po uruchomieniu tej procedura składowana, można użyć skryptu wynikowy ręcznie utworzyć procedura składowana na subskrybentów.