Bagikan melalui


sp_scriptdynamicupdproc (T-SQL)

Berlaku untuk: SQL Server

CREATE PROCEDURE Menghasilkan pernyataan yang membuat prosedur tersimpan pembaruan dinamis. Pernyataan UPDATE dalam prosedur tersimpan kustom dibangun secara dinamis berdasarkan MCALL sintaks yang menunjukkan kolom mana yang akan diubah. Gunakan prosedur tersimpan ini jika jumlah indeks pada tabel berlangganan bertambah dan jumlah kolom yang diubah kecil. Prosedur tersimpan ini dijalankan di Publisher pada database publikasi.

Konvensi sintaks transact-SQL

Sintaks

sp_scriptdynamicupdproc [ @artid = ] artid
[ ; ]

Argumen

[ @artid = ] dijadikan artid

ID artikel. @artid int, tanpa default.

Tataan hasil

Mengembalikan tataan hasil yang terdiri dari satu kolom nvarchar(4000). Kumpulan hasil membentuk pernyataan lengkap CREATE PROCEDURE yang digunakan untuk membuat prosedur tersimpan kustom.

Keterangan

sp_scriptdynamicupdproc digunakan dalam replikasi transaksional. Logika pembuatan skrip default MCALL mencakup semua kolom dalam UPDATE pernyataan dan menggunakan bitmap untuk menentukan kolom yang telah berubah. Jika kolom tidak berubah, kolom diatur kembali ke dirinya sendiri, yang biasanya tidak menyebabkan masalah. Jika kolom diindeks, pemrosesan tambahan terjadi. Pendekatan dinamis hanya mencakup kolom yang telah berubah, yang menyediakan string optimal UPDATE . Namun, pemrosesan tambahan dikeluarkan pada runtime ketika pernyataan dinamis UPDATE dibuat. Kami menyarankan agar Anda menguji pendekatan dinamis dan statis, lalu memilih solusi optimal.

Izin

Hanya anggota peran server tetap sysadmin atau peran database tetap db_owner yang dapat menjalankan sp_scriptdynamicupdproc.

Contoh

Contoh ini membuat artikel (dengan @artid diatur ke 1) pada authors tabel dalam pubs database, dan menentukan bahwa UPDATE pernyataan adalah prosedur kustom untuk dijalankan: 'MCALL sp_mupd_authors' .

Hasilkan prosedur tersimpan kustom untuk dijalankan oleh Agen Distribusi di Pelanggan dengan menjalankan prosedur tersimpan berikut di Penerbit:

EXEC sp_scriptdynamicupdproc @artid = '1';

Pernyataan mengembalikan:

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;

Setelah menjalankan prosedur tersimpan ini, Anda dapat menggunakan skrip yang dihasilkan untuk membuat prosedur tersimpan secara manual di Pelanggan.