Aracılığıyla paylaş


sp_refreshSQLmodule (Transact-SQL)

Belirtilen olmayan-şemaya bağlı saklı yordam, kullanıcı tanımlı işlev, Görüntüle, DML tetikleyici, - veritabanıdüzeyDDL tetikleyici veya server -düzeyDDL tetikleyici geçerli veritabanında meta veriler güncelleştirir. Alttaki nesnelerini değişiklikler nedeniyle sürekli meta veriler parametre veri türleri gibi bu nesnelerin güncel hale gelebilir.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

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

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

Bağımsız değişkenler

  • [ @name= ] 'module_name'
    saklı yordam, kullanıcı tanımlı işlev, görünüm, DML tetikleyici, - veritabanıdüzeyDDL tetikleyici veya server -düzeyDDL tetikleyici adıdır. module_namebir ortak dil çalışma zamanı (clr) saklı yordam veya CLR işleviolamaz.module_nameşemaya bağlı olamaz.module_nameİş nvarchar, ile hiçbir varsayılan.module_nameparçalı bir tanımlayıcı olabilir, ancak yalnızca geçerli veritabanındaki nesnelere başvurabilirsiniz.

  • [ , @namespace = ] ' <class> '
    Belirtilen modül sınıfıdır.Zaman module_name olan bir DDL tetikleyici <class> gerekiyor.Geçerli DATABASE_DDL_TRIGGER ve SERVER_DDL_TRIGGER sinyalidir.

    <class>is nvarchar(20).

Dönüş Kodu Değerleri

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

Açıklamalar

sp_refreshsqlmoduletanımına etkileyen modül alttaki nesnelere değişiklikler yapıldığında çalıştırmanız gerekir.Aksi halde, sorgulanan veya çağrılan modülü beklenmeyen sonuçlar oluşturabilir.Görünümü yenilemek için kullanabilirsiniz sp_refreshsqlmodule veya sp_refreshview aynı sonuçlar.

sp_refreshsqlmoduleetkilemez herhangi bir izinleri, genişletilmiş özellikler, veya nesnesiyle ilişkilendirilmiş seçenekleri ayarlayın.

Herhangi bir veritabanı bağlamında bu saklı yordam server -düzeyDDL tetikleyici, yürütmek yenilemek için.

Not

Çalıştırdığınızda nesnesi ile ilişkilendirilmiş hiçbir imza atılan sp_refreshsqlmodule.

İzinler

Modül üzerinde 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 - veritabanıdüzeyDDL tetikleyici olduğunda geçerli veritabanındaki alter any database DDL tetikleyici izni gerektirir. Belirtilen modül server -düzey DDL tetikleyici olduğunda control server izni gerektirir.

Ayrıca, execute ile tanımlı modülleri için yan tümcebelirtilen patron sunucu üzerinde özelliklerini Al izni gereklidir.Genellikle, bir nesneyi yenileme, execute as değişmez sorumlusu, modül execute as kullanıcı tanımlı ve kullanıcı asıl adını şimdi, saat farklı bir kullanıcı modülü çözümler sürece oluşturuldu.

Örnekler

A.Kullanıcı tanımlı bir işlevyenileme

Aşağıdaki örnek, kullanıcı tanımlı bir işlevyeniler.Bir diğer ad veri türü örnek oluşturur mytypeve kullanıcı tanımlı bir işlev, to_upper, kullanan mytype.Sonra mytype yeniden adlandırılmış myoldtypeve yeni mytype oluşturulan farklı bir tanım. olandbo.to_upperişlev , böylece yeni uygulaması başvurduğu yenilendiğini mytype, eskisinin yerine.

-- Create an alias type.
USE AdventureWorks2008R2;
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.-Veritabanıdüzey DDL tetikleyici yenileme

Aşağıdaki örnek veritabanı -düzey DDL tetikleyici yeniler.

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

C.Server -düzey DDL tetikleyici yenileme

Aşağıdaki örnek, sunucu -düzey DDL tetikleyici yeniler.

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