Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics (endast dedikerad SQL-pool)
SQL-databas i Microsoft Fabric
Uppdaterar metadata för den specificerade icke-schemabundna lagrade proceduren, användardefinierad funktion, vy, DML-trigger, databasnivå-DDL-trigger eller servernivå-DDL-trigger i den aktuella databasen. Persistenta metadata för dessa objekt, såsom datatyper av parametrar, kan bli föråldrade på grund av förändringar i deras underliggande objekt. Till exempel kan du se ett fel som The definition for user-defined data type 'typename' has changed. Att uppdatera metadata för modulen som använder typen som anges i felet kan lösa problemet.
Transact-SQL syntaxkonventioner
sp_refreshsqlmodule
[ @name = ] N'name'
[ , [ @namespace = ] { OBJECT | DATABASE_DDL_TRIGGER | SERVER_DDL_TRIGGER } ]
[ ; ]
Arguments
[ @name = ] N'namn'
Namnet på den lagrade proceduren, användardefinierad funktion, vy, DML-utlösare, DDL-utlösare på databasnivå eller DDL-utlösare på servernivå. @name är nvarchar(776), utan standardvärde. @name kan inte vara en clr-lagrad procedur (common language runtime) eller en CLR-funktion. @name kan inte vara schemabunden. @name kan vara en identifierare i flera delar, men kan bara referera till objekt i den aktuella databasen.
[ @namespace = ] N'namespace'
Klassen för den angivna modulen.
@namespace är nvarchar(20), med standardvärdet OBJECT. När @name är en DDL-utlösare krävs @namespace . Giltiga indata är DATABASE_DDL_TRIGGER och SERVER_DDL_TRIGGER.
Returnera kodvärden
0 (lyckades) eller ett icke-nolltal (fel).
Anmärkningar
sp_refreshsqlmodule bör köras när ändringar görs på objekten under modulen som påverkar dess definition. Annars kan modulen ge oväntade resultat vid frågeställen eller anrop. För att uppdatera en vy kan du använda antingen sp_refreshsqlmodule eller sp_refreshview med samma resultat.
sp_refreshsqlmodule påverkar inte några behörigheter, utökade egenskaper eller SET alternativ som är associerade med objektet.
Om du vill uppdatera en DDL-utlösare på servernivå kör du den här lagrade proceduren från kontexten för alla databaser.
Anmärkning
Alla signaturer som är associerade med objektet tas bort när du kör sp_refreshsqlmodule.
Permissions
Kräver ALTER behörighet för modulen och REFERENCES behörighet för alla CLR-användardefinierade typer och XML-schemasamlingar som refereras till av objektet. Kräver ALTER ANY DATABASE DDL TRIGGER behörighet i den aktuella databasen när den specificerade modulen är en databasnivå DDL-trigger. Kräver CONTROL SERVER behörighet när den specificerade modulen är en servernivå DDL-trigger.
Dessutom krävs tillstånd för moduler som definieras med klausulen EXECUTE ASIMPERSONATE för den angivna principen. Generellt ändrar inte uppdatering av ett objekt dess EXECUTE AS principal, om inte modulen definierades med EXECUTE AS USER och användarnamnet på principalen nu upplöses till en annan användare än användaren vid tidpunkten för modulens skapande.
Examples
Kodexemplen i den här artikeln använder AdventureWorks2025- eller AdventureWorksDW2025-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.
A. Uppdatera en användardefinierad funktion
Följande exempel uppdaterar en användardefinierad funktion. Exemplet skapar en aliasdatatyp, mytype, och en användardefinierad funktion, to_upper, som använder mytype. Sedan mytype byter namn till myoldtype, och en ny mytype skapas som har en annan definition. Funktionen dbo.to_upper uppdateras så att den refererar till den nya implementationen av mytype, istället för den gamla.
I det första steget, skapa en aliastyp.
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ärefter ökar du längden på aliastypen.
EXECUTE sp_rename 'mytype', 'myoldtype', 'userdatatype';
GO
CREATE TYPE mytype
FROM NVARCHAR (10);
GO
Funktionsparametern använder fortfarande den gamla typen och misslyckas på grund av trunkering.
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
Uppdatera funktionen för att binda till den omdöpta typen.
EXECUTE sys.sp_refreshsqlmodule 'dbo.to_upper';
Funktionsparametrarna är nu bundna till rätt typ och satsen fungerar korrekt.
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. Uppdatera en databasnivå-DDL-trigger
Följande exempel uppdaterar en databasnivå-DDL-trigger.
USE AdventureWorks2022;
GO
EXECUTE sys.sp_refreshsqlmodule
@name = 'ddlDatabaseTriggerLog',
@namespace = 'DATABASE_DDL_TRIGGER';
GO
C. Uppdatera en servernivå-DDL-trigger
Följande exempel uppdaterar en servernivå-DDL-trigger.
USE master;
GO
EXECUTE sys.sp_refreshsqlmodule
@name = 'ddl_trig_database',
@namespace = 'SERVER_DDL_TRIGGER';
GO