Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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:
EXECUTE 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 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;
Setelah menjalankan prosedur tersimpan ini, Anda dapat menggunakan skrip yang dihasilkan untuk membuat prosedur tersimpan secara manual di Pelanggan.