sp_scriptdynamicupdproc (Transact-sql)
Dinamik güncelleştirme depolanan yordamı oluşturur create procedure deyimi oluşturur. update deyimi içinde özel bir saklı yordam değiştirmek için hangi sütunların gösteren mcall sözdizimi dinamik göre kurulmuştur. Abone tablosundaki dizinlerin sayısı büyüyor ve değiştirilmesini sütun sayısı küçük bu saklı yordam kullanın. Bu saklı yordam yayımcı adresindeki yayın veritabanı çalıştırılır.
Transact-SQL Sözdizim Kuralları
Sözdizimi
sp_scriptdynamicupdproc [ @artid =] artid
Bağımsız değişkenler
- **@artid=**artid
Makale kimliği. artidise int, hiçbir varsayılan ile.
Sonuç Kümeleri
Bir sonuç kümesi döndürür oluşan tek bir nvarchar(4000) sütun. Sonuç, özel bir saklı yordam oluşturmak için kullanılan tam create procedure deyimi için formlar ayarlayın.
Açıklamalar
sp_scriptdynamicupdproc işlem çoğaltma kullanılır. Varsayılan mcall kodlama mantığı update deyimi içinde tüm sütunları içeren ve bir bitmap değişen sütunları belirlemek için kullanır. Bir sütun değiştirmediyseniz, sütun geri kendisine genellikle sorun neden ayarlanır. Sütunu dizine ilave işlem gerçekleşir. Dinamik bir yaklaşım değişmiş, sütunları olan uygun bir güncelleştirme dize sağlar içerir. Dinamik güncelleştirme deyimini oluşturulduğunda ancak ekstra işlem çalışma zamanında tahakkuk. Dinamik ve statik yaklaşımları test edin ve en uygun çözümü seçmek öneririz.
İzinler
Yalnızca üyeleri sysadmin sabit sunucu rolü veya db_owner sabit veritabanı rolü yürütebilirsiniz sp_scriptdynamicupdproc.
Örnekler
Bu örnek, bir makale oluşturur (ile artidiçin 1) üzerinde yazarlar içinde tablo pub veritabanı ve güncelleştirme deyimini yürütmek için özel bir yordam olduğunu belirtir:
'MCALL sp_mupd_authors'
'MCALL sp_mupd_authors'
Abone adresindeki dağıtım aracı tarafından yayımcı saklı yordamını çalıştırarak yürütülecek özel saklı yordamlarda oluşturur:
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
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
Bu saklı yordam çalıştırdıktan sonra saklı yordam aboneleri el ile oluşturmak için oluşturulan komut dosyasını kullanabilirsiniz.