Aracılığıyla paylaş


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.

Konu bağlantısı simgesi 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.

Ayrıca bkz.

Başvuru

Sistem saklı yordamları (Transact-sql)