Aracılığıyla paylaş


sp_refreshsqlmodule (Transact-SQL)

Belirtilen olmayan-şemaya bağlı saklı yordamı, kullanıcı tanımlı fonksiyon, görünüm, DML tetikleyicisi, veritabanı düzey DDL tetikleyicisi veya sunucu düzeyinde DDL tetikleyicisi geçerli veritabanında için meta veriler güncelleştirir.Arka plandaki nesneleri değişiklikler nedeniyle parametreleri, veri türleri gibi bu nesnelerin kalıcı meta veriler güncel duruma gelebilir.

Topic link iconTransact-SQL sözdizimi kuralları

sys.sp_refreshsqlmodule [ @name = ] 'module_name' 
        [ , [ @namespace = ] ' <class> ' ]

<class> ::=
{
  | DATABASE_DDL_TRIGGER
  | SERVER_DDL_TRIGGER
}

Bağımsız değişkenler

  • [ @name= ] 'module_name'
    Is the name of the stored procedure, user-defined function, view, DML trigger, database-level DDL trigger, or server-level DDL trigger.module_name cannot be a common language runtime (CLR) stored procedure or a CLR function.module_name cannot be schema-bound.module_name is nvarchar, with no default.module_name can be a multi-part identifier, but can only refer to objects in the current database.

  • [ , @namespace = ] ' <class> '
    Belirtilen modül sınıftır.Ne zaman module_name bir DDL Tetik <class> gereklidir. Geçerli girişleri DATABASE_DDL_TRIGGER ve SERVER_DDL_TRIGGER ' dir.

    <class> olan nvarchar(20).

Dönüş Kodu Değerleri

0 (başarılı) veya sıfır olmayan bir sayı (hata)

Remarks

sp_refreshsqlmodule tanımını etkileyen modül alttaki nesneleri bir değişiklik yapıldığında çalıştırılması gerekir.Aksi halde, sorgulanan veya başlatıldı modül beklenmeyen sonuçlar doğurabilir.Bir görünümü yenilemek için kullanabilirsiniz sp_refreshsqlmodule or sp_refreshview ile aynı sonuçlar.

sp_refreshsqlmodule değil etkileyen tüm izinleri, genişletilmiş özellikler, veya nesnesi ile ilişkilendirilmiş olan seçenekleri küme.

Sunucu-CVE-2006-düzey DDL tetikleyicisi yenilemek için , bu saklı yordam, herhangi bir veritabanı bağlamından çalıştırabilirsiniz.

Not

Çalıştırdığınızda nesneyle ilişkili hiçbir imza bırakılır sp_refreshsqlmodule.

İzinler

Modül ALTER iznine ve herhangi bir CLR kullanıcı tanımlı türler ve nesne tarafından başvurulan bir XML şema koleksiyonları BAşVURULAR izni gerektirir.Belirtilen modül bir veritabanı düzey DDL tetikleyicisi olduğunda, geçerli veritabanında ALTER ANY DATABASE DDL TRIGGER izni gerektirir.Belirtilen modül bir sunucu-CVE-2006-düzey DDL tetikleyicisi olduğunda, DENETIM SERVER iznine gerek duyar.

Ayrıca, ile yürütmek tanımlanan modülleri için yan tümce, üzerinde belirtilen anapara özelliklerini Al izni gereklidir.Genellikle, bir nesne yenileme, yürütmek AS değiştirmez sorumlusu, modül yürütmek AS USER ile tanımlanan ve anapara kullanıcı adı şimdi farklı bir kullanıcı, saat birimi çözümler oluşturuldu.

Örnekler

C.Kullanıcı tanımlı bir işlev yenileniyor

Aşağıdaki örnek, kullanıcı tanımlı bir işlev yeniler.Örnek bir diğer ad veri türü oluşturur. mytypeve kullanıcı tanımlı bir işlev to_upper, kullanan mytype. Then mytype yeniden adlandırılır myoldtype, yeni ve mytype oluşturulan, farklı bir tanım vardır. The dbo.to_upper işlev is refreshed so that it references the new implementation of mytype, instead of the old one.

-- Create an alias type.
USE AdventureWorks;
GO
IF EXISTS (SELECT 'mytype' FROM sys.types WHERE name = 'mytype')
DROP TYPE mytype;
GO

CREATE TYPE mytype FROM nvarchar(5);
GO

IF OBJECT_ID ('dbo.to_upper', 'FN') IS NOT NULL
DROP FUNCTION dbo.to_upper;
GO

CREATE FUNCTION dbo.to_upper (@a mytype)
RETURNS mytype
WITH ENCRYPTION
AS
BEGIN
RETURN upper(@a)
END;
GO

SELECT dbo.to_upper('abcde');
GO

-- Increase the length of the alias type.
sp_rename 'mytype', 'myoldtype', 'userdatatype';
GO

CREATE TYPE mytype FROM nvarchar(10);
GO

-- The function parameter still uses the old type.
SELECT name, type_name(user_type_id) 
FROM sys.parameters 
WHERE object_id = OBJECT_ID('dbo.to_upper');
GO

SELECT dbo.to_upper('abcdefgh'); -- Fails because of truncation
GO

-- Refresh the function to bind to the renamed type.
EXEC sys.sp_refreshsqlmodule 'dbo.to_upper';

-- The function parameters are now bound to the correct type and the statement works correctly.
SELECT name, type_name(user_type_id) FROM sys.parameters
WHERE object_id = OBJECT_ID('dbo.to_upper');
GO

SELECT dbo.to_upper('abcdefgh');
GO

b.Bir veritabanı düzey DDL tetikleyicisi yenileniyor

Aşağıdaki örnek, bir veritabanı düzey DDL tetikleyicisi yeniler.

USE AdventureWorks;
GO
EXEC sys.sp_refreshsqlmodule @name = 'ddlDatabaseTriggerLog' , @namespace = 'DATABASE_DDL_TRIGGER';
GO

c.Sunucu-CVE-2006-düzey DDL tetikleyicisi yenileniyor

Aşağıdaki örnek, sunucu düzeyinde DDL tetikleyicisi yeniler.

USE master;
GO
EXEC sys.sp_refreshsqlmodule @name = 'ddl_trig_database' , @namespace = 'SERVER_DDL_TRIGGER';
GO