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.
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.
Konten terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk