Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics (yalnızca ayrılmış SQL havuzu)
Microsoft Fabric'te SQL veritabanı
Mevcut veritabanında belirtilen şema bağlı olmayan depolanmış prosedür, kullanıcı tanımlı fonksiyon, görünüm, DML tetikleyicisi, veritabanı düzeyindeki DDL tetikleyicisi veya sunucu düzeyindeki DDL tetikleyicisi için meta verileri günceller. Bu nesneler için kalıcı meta veriler, örneğin parametreler gibi veri türleri, altta yatan nesnelerdeki değişiklikler nedeniyle eskiyebilir. Örneğin, 'de bir hata görebilirsiniz.The definition for user-defined data type 'typename' has changed Hatada belirtilen tipi kullanan modül için meta verilerin yenilenmesi sorunu çözebilir.
Transact-SQL söz dizimi kuralları
sp_refreshsqlmodule
[ @name = ] N'name'
[ , [ @namespace = ] { OBJECT | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER } ]
[ ; ]
Arguments
[ @name = ] ‘name’
Saklı yordamın adı, kullanıcı tanımlı işlev, görünüm, DML tetikleyicisi, veritabanı düzeyinde DDL tetikleyicisi veya sunucu düzeyinde DDL tetikleyicisi. @namenvarchar(776) şeklindedir ve varsayılan değer yoktur. @name ortak dil çalışma zamanı (CLR) saklı yordamı veya CLR işlevi olamaz. @name şemaya bağlı olamaz. @name çok parçalı bir tanımlayıcı olabilir, ancak yalnızca geçerli veritabanındaki nesnelere başvurabilir.
[ @namespace = ] N'namespace'
Belirtilen modülün sınıfı.
@namespacevarsayılan değeri nvarchar(20)'dir OBJECT.
@name bir DDL tetikleyicisi olduğunda @namespace gerekir. Geçerli girişler DATABASE_DDL_TRIGGER ve SERVER_DDL_TRIGGER'dir.
Dönüş kodu değerleri
0 (başarı) veya sıfır olmayan bir sayı (hata).
Açıklamalar
sp_refreshsqlmodule modülün tanımını etkileyen nesnelerde değişiklikler yapıldığında çalıştırılmalıdır. Aksi takdirde, modül sorgulandığında veya çağrıldığında beklenmedik sonuçlar verebilir. Bir görünümü yenilemek için her ikisini sp_refreshsqlmodule veya sp_refreshview aynı sonucu kullanabilirsiniz.
sp_refreshsqlmodule nesneyle ilişkili izinleri, genişletilmiş özellikleri veya SET seçenekleri etkilemez.
Sunucu düzeyinde bir DDL tetikleyicisini yenilemek için bu saklı yordamı herhangi bir veritabanının bağlamında yürütebilirsiniz.
Uyarı
Herhangi bir nesneyle ilişkilendirilmiş imzalar, sp_refreshsqlmodule çalıştırıldığında silinir.
Permissions
Modül üzerinde ALTER izni ve nesne tarafından başvurulan CLR kullanıcı tanımlı türler ve XML şema koleksiyonları üzerinde REFERENCES izni gerektirir. Belirtilen modül veritabanı düzeyinde bir DDL tetikleyici olduğunda mevcut veritabanında izin gerektirir ALTER ANY DATABASE DDL TRIGGER . Belirtilen modül sunucu düzeyinde bir DDL tetikleyici olduğunda izin gerektirir CONTROL SERVER .
Ayrıca, bu EXECUTE AS maddeyle IMPERSONATE tanımlanan modüller için belirtilen prensipte izin gereklidir. Genel olarak, bir nesneyi EXECUTE AS yenilemek, modül ile EXECUTE AS USER tanımlanmadıkça ve ana nesnenin kullanıcı adı modül oluşturulduğu zamanki kullanıcıdan farklı bir kullanıcıya dönüşmedikçe ana olarak değiştirilmez.
Örnekler
Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.
A. Kullanıcı tanımlı bir fonksiyonu yenile
Aşağıdaki örnek, kullanıcı tanımlı bir fonksiyonu yeniler. Örnek, bir takma ad veri tipi mytypeve kullanıcı tarafından tanımlanan bir fonksiyon yaratır, to_upper, bu fonksiyon .mytype Sonra, mytype adı olarak değiştirilir myoldtypeve farklı bir tanıma sahip yeni mytype bir şey oluşturulur. Fonksiyon dbo.to_upper , eski uygulamaya değil, yeni uygulamasına mytypereferans verecek şekilde yenilenir.
İlk adımda, bir takma ad türü oluşturun.
USE AdventureWorks2022;
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
Sonra, takma adın uzunluğunu artırın.
EXECUTE sp_rename 'mytype', 'myoldtype', 'userdatatype';
GO
CREATE TYPE mytype
FROM NVARCHAR (10);
GO
Fonksiyon parametresi hâlâ eski tipi kullanır ve kesme nedeniyle başarısız olur.
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
Fonksiyonu yenileyerek yeniden adlandırılan tipe bağlanın.
EXECUTE sys.sp_refreshsqlmodule 'dbo.to_upper';
Fonksiyon parametreleri artık doğru tipe bağlıdır ve ifade doğru şekilde çalışır.
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üzeyinde bir DDL tetikleyicisini yenile
Aşağıdaki örnek, veritabanı düzeyinde bir DDL tetikleyicisini yeniler.
USE AdventureWorks2022;
GO
EXECUTE sys.sp_refreshsqlmodule
@name = 'ddlDatabaseTriggerLog',
@namespace = 'DATABASE_DDL_TRIGGER';
GO
C. Sunucu düzeyinde bir DDL tetikleyicisini yenile
Aşağıdaki örnek, sunucu düzeyinde bir DDL tetikleyicisini yeniler.
USE master;
GO
EXECUTE sys.sp_refreshsqlmodule
@name = 'ddl_trig_database',
@namespace = 'SERVER_DDL_TRIGGER';
GO