Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics (csak dedikált SQL-készlet)
SQL-adatbázis a Microsoft Fabricben
Frissíti a megadott nem séma-kötött tárolt eljárás, felhasználó által definiált függvény, nézet, DML trigger, adatbázis-szintű DDL trigger vagy szerverszintű DDL trigger metaadatait a jelenlegi adatbázisban. Ezeknek az objektumoknak a tartós metaadatai, például paramétertípusok, elavulhatnak az alapul szolgáló objektumok változása miatt. Például előfordulhat, hogy hibát láthatsz, mint The definition for user-defined data type 'typename' has changed. A hiba által megadott típust használó modul metaadatainak frissítése megoldhatja a problémát.
Transact-SQL szintaxis konvenciók
sp_refreshsqlmodule
[ @name = ] N'name'
[ , [ @namespace = ] { OBJECT | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER } ]
[ ; ]
Arguments
[ @name = ] N'name'
A tárolt eljárás neve, felhasználó által definiált függvény, nézet, DML-eseményindító, adatbázisszintű DDL-eseményindító vagy kiszolgálószintű DDL-eseményindító. @name egy nvarchar(776) típusú változó, alapértelmezés nélkül. @name nem lehet általános nyelvi futtatókörnyezet (CLR) tárolt eljárás vagy CLR-függvény. @name nem lehet sémához kötni. @name többrészes azonosító lehet, de csak az aktuális adatbázisban lévő objektumokra hivatkozhat.
[ @namespace = ] N'namespace'
A megadott modul osztálya.
@namespacenvarchar(20), alapértelmezés szerint OBJECT. Ha @name DDL-eseményindító, @namespace szükséges. Az érvényes bemenetek a következők DATABASE_DDL_TRIGGER : és SERVER_DDL_TRIGGER.
Kódértékek visszaadása
0 (sikeres) vagy nemero szám (hiba).
Megjegyzések
sp_refreshsqlmodule akkor kell futtatni, amikor a modul mögött álló objektumokban változtatásokat hajtanak végre, amelyek befolyásolják a definícióját. Ellenkező esetben a modul váratlan eredményeket hozhat lekérdezés vagy meghívás során. A nézet frissítéséhez bármelyik vagy sp_refreshsqlmodule azonos eredményt használhatodsp_refreshview.
sp_refreshsqlmodule nincs hatással az objektumhoz társított engedélyekre, kiterjesztett tulajdonságokra vagy SET beállításokra.
Kiszolgálószintű DDL-eseményindító frissítéséhez hajtsa végre ezt a tárolt eljárást bármely adatbázis környezetéből.
Megjegyzés:
Az objektumhoz társított aláírások törlődnek, amikor futtatja sp_refreshsqlmodule.
Permissions
Engedélyre van szükség ALTER a modulhoz és REFERENCES az objektum által hivatkozott CLR-felhasználó által definiált típusokhoz és XML-sémagyűjteményekhez. Engedélyt igényel ALTER ANY DATABASE DDL TRIGGER a jelenlegi adatbázisban, ha a megadott modul adatbázis-szintű DDL trigger. Engedélyt igényel CONTROL SERVER , ha a megadott modul szerverszintű DDL trigger.
Ezen felül, a klauzulával definiált EXECUTE AS modulok esetében IMPERSONATE engedély szükséges a megadott alapelvre. Általában egy objektum frissítése nem változtatja meg a EXECUTE AS fő értékét, kivéve, ha a modul definiálva van definiálva EXECUTE AS USER , és a fő felhasználóneve most már egy másik felhasználóra oszlik meg, mint a modul létrehozásakor a felhasználó.
Példák
A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.
A. Felhasználó által definiált függvény frissítése
A következő példa frissít egy felhasználó által definiált függvényt. A példa létrehoz egy alias adattípust, mytype, és egy felhasználó által definiált függvényt, to_upper, amely használ mytype. Ezután mytype átnevezik , és myoldtypeegy új mytype definíciót hoznak létre, ami más definíciójú. A dbo.to_upper függvényt úgy frissítik, hogy az új mytypeimplementációra hivatkozzon a régire helyett.
Az első lépésben hozz létre egy alias típust.
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
Ezután növeld az álnév típus hosszát.
EXECUTE sp_rename 'mytype', 'myoldtype', 'userdatatype';
GO
CREATE TYPE mytype
FROM NVARCHAR (10);
GO
A függvényparaméter továbbra is a régi típust használja, és a csorkítás miatt hibázik.
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
Frissítsd a függvényt, hogy a névre átnevezett típushoz kötözzön.
EXECUTE sys.sp_refreshsqlmodule 'dbo.to_upper';
A függvényparaméterek most a megfelelő típushoz vannak kötve, és az utasítás megfelelően működik.
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. Frissítsd meg az adatbázis-szintű DDL triggeret
A következő példa frissíti az adatbázis-szintű DDL triggert.
USE AdventureWorks2022;
GO
EXECUTE sys.sp_refreshsqlmodule
@name = 'ddlDatabaseTriggerLog',
@namespace = 'DATABASE_DDL_TRIGGER';
GO
C. Frissítsd fel egy szerverszintű DDL triggeret
A következő példa egy szerverszintű DDL triggert frissít.
USE master;
GO
EXECUTE sys.sp_refreshsqlmodule
@name = 'ddl_trig_database',
@namespace = 'SERVER_DDL_TRIGGER';
GO