Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance
Azure SQLAzure Synapse Analytics (pouze vyhrazený fond SQL)
Databáze SQL v Microsoft Fabric
Aktualizuje metadata pro specifikovanou uloženou proceduru bez schématu svázanou proceduru, uživatelem definovanou funkci, pohled, DML trigger, databázový DDL trigger nebo serverový DDL trigger v aktuální databázi. Trvalá metadata těchto objektů, jako jsou datové typy parametrů, mohou zastarat kvůli změnám jejich základních objektů. Například můžete vidět chybu jako The definition for user-defined data type 'typename' has changed. Obnovení metadat modulu, který používá typ uvedený v chybě, by mohlo problém vyřešit.
sp_refreshsqlmodule
[ @name = ] N'name'
[ , [ @namespace = ] { OBJECT | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER } ]
[ ; ]
Arguments
[ @name = ] N'jméno'
Název uložené procedury, uživatelem definovaná funkce, zobrazení, trigger DML, trigger DDL na úrovni databáze nebo trigger DDL na úrovni serveru. @name je nvarchar(776) bez výchozího nastavení. @name nemůže být uložená procedura CLR (Common Language Runtime) ani funkce CLR. @name nemůže být svázaný se schématem. @name může být identifikátor s více částmi, ale může odkazovat pouze na objekty v aktuální databázi.
[ @namespace = ] N'namespace'
Třída zadaného modulu.
@namespace je nvarchar(20) s výchozím nastavením OBJECT. Pokud je @name aktivační událost DDL, @namespace se vyžaduje. Platné vstupy jsou DATABASE_DDL_TRIGGER a SERVER_DDL_TRIGGER.
Hodnoty návratového kódu
0 (úspěch) nebo nenulové číslo (selhání).
Poznámky
sp_refreshsqlmodule by měly být provedeny při změnách objektů, které jsou základem modulu a ovlivňují jeho definici. Jinak by modul mohl při dotazu nebo vyvolání přinést neočekávané výsledky. Pro obnovení pohledu můžete použít buď jednu sp_refreshsqlmodule z nich, nebo sp_refreshview se stejným výsledkem.
sp_refreshsqlmodule nemá vliv na žádná oprávnění, rozšířené vlastnosti ani SET možnosti přidružené k objektu.
Pokud chcete aktualizovat trigger DDL na úrovni serveru, spusťte tuto uloženou proceduru z kontextu jakékoli databáze.
Poznámka:
Všechny podpisy přidružené k objektu se při spuštění sp_refreshsqlmodulezahodí .
Povolení
Vyžaduje ALTER oprávnění k modulu a REFERENCES oprávnění pro všechny uživatelem definované typy CLR a kolekce schémat XML odkazované objektem. Vyžaduje ALTER ANY DATABASE DDL TRIGGER oprávnění v aktuální databázi, pokud je specifikovaný modul DDL triggerem na úrovni databáze. Vyžaduje CONTROL SERVER oprávnění, pokud je specifikovaný modul serverovým DDL triggerem.
Navíc pro moduly definované touto klauzulí EXECUTE ASIMPERSONATE je vyžadováno oprávnění na specifikovaný princip. Obecně obnovení objektu nezmění jeho EXECUTE AS principal, pokud modul nebyl definován s a EXECUTE AS USER uživatelské jméno principala se nyní vyřeší na jiného uživatele, než jaký byl modul vytvořen.
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Obnovte uživatelem definovanou funkci
Následující příklad obnovuje uživatelsky definovanou funkci. Příklad vytváří alias datový typ mytype, a uživatelem definovanou funkci to_upper, která používá mytype. Pak se přejmenuje mytype na myoldtype, a vznikne nový mytype , který má jinou definici. Funkce dbo.to_upper je obnovena tak, aby odkazovala na novou implementaci , mytypemísto na starou.
V prvním kroku vytvořte typ aliasu.
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
Dále prodloužte délku typu aliasu.
EXECUTE sp_rename 'mytype', 'myoldtype', 'userdatatype';
GO
CREATE TYPE mytype
FROM NVARCHAR (10);
GO
Parametr funkce stále používá starý typ a selhává kvůli okrácení.
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
Obnovte funkci tak, aby se navázala na přejmenovaný typ.
EXECUTE sys.sp_refreshsqlmodule 'dbo.to_upper';
Parametry funkce jsou nyní vázány na správný typ a příkaz funguje správně.
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. Obnovit DDL trigger na úrovni databáze
Následující příklad obnovuje spouštěč DDL na úrovni databáze.
USE AdventureWorks2022;
GO
EXECUTE sys.sp_refreshsqlmodule
@name = 'ddlDatabaseTriggerLog',
@namespace = 'DATABASE_DDL_TRIGGER';
GO
C. Obnovit spouštěč DDL na úrovni serveru
Následující příklad obnovuje spouštěč DDL na úrovni serveru.
USE master;
GO
EXECUTE sys.sp_refreshsqlmodule
@name = 'ddl_trig_database',
@namespace = 'SERVER_DDL_TRIGGER';
GO
Související obsah
- sp_refreshview (Transact-SQL)
- uložené procedury databázového stroje (Transact-SQL)