Udostępnij za pośrednictwem


sp_refreshsqlmodule (języka Transact-SQL)

Aktualizacja metadane dla określonej procedura przechowywana nie związanych ze schematem, funkcja zdefiniowanej przez użytkownika, widok, DML wyzwalacz, wyzwalacz DLL poziom bazy danych lub serwera poziom DDL wyzwalacza w bieżącej bazie danych.Trwałe metadane dla tych obiektów, takich jak typy danych parametrów, może stać się przestarzałe z powodu zmiany ich obiektów.

Topic link iconKonwencje składni języka Transact-SQL

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

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

Argumenty

  • [ @name= ] 'module_name'
    Is the name of the stored procedure, user-defined function, view, DML trigger, database-level DDL trigger, or server-level DDL trigger.module_name cannot be a common language runtime (CLR) stored procedure or a CLR function.module_name cannot be schema-bound.module_name is nvarchar, with no default.module_name can be a multi-part identifier, but can only refer to objects in the current database.

  • [ , @namespace = ] ' <class> '
    Jest to klasa określonego modułu.Kiedy module_name jest wyzwalacz DLL <class> jest wymagany. Prawidłowe dane wejściowe są DATABASE_DDL_TRIGGER i SERVER_DDL_TRIGGER.

    <class> jest nvarchar(20).

Wartości kodów powrotnych

sp_update_alert

Remarks

sp_refreshsqlmodule powinien być uruchamiany, gdy zostaną wprowadzone zmiany do obiektów podstawowych modułu, które mają wpływ na jego definicję.W przeciwnym przypadku moduł może dawać nieoczekiwane wyniki, gdy jest używane przez kwerendy lub wywoływane.Aby odświeżyć widok, można użyć albo sp_refreshsqlmodule or sp_refreshview o takich samych wyniki.

sp_refreshsqlmodule nie wpływa na wszystkie uprawnienia, właściwości rozszerzone lub zestaw opcje, które są skojarzone z obiektem.

Aby odświeżyć poziomu serwera wyzwalacz DLL, wykonaj tę procedura przechowywana z kontekstu dowolnej bazy danych.

Uwaga

Wszystkie podpisy, które są skojarzone z obiektem są usuwane po uruchomieniu sp_refreshsqlmodule.

Uprawnienia

Wymaga ALTER modułu i uprawnienie materiały referencyjne na CLR typów zdefiniowanych przez użytkownika i kolekcji schematu XML, do których odwołuje się obiekt.Wymaga uprawnień ALTER bez TRIGGER DDL bazy danych w bieżącej bazie danych, gdy określony moduł jest wyzwalacz DLL poziom bazy danych.Wymaga uprawnienia CONTROL SERVER, gdy określony moduł jest na poziomie serwera wyzwalacz DLL.

Ponadto dla modułów, które są zdefiniowane w wykonać AS klauzula, wymagane jest uprawnienie do PERSONIFIKACJI spłaty kapitału w określonym.Ogólnie rzecz biorąc, odświeżenie obiektu nie ulega zmianie jego AS wykonać głównego, chyba że moduł zostało zdefiniowane przy użyciu wykonać AS USER oraz głównej nazwy użytkownika teraz rozwiązanie do innego użytkownika niż w czasie moduł został utworzony.

Przykłady

A.Odświeżanie funkcja zdefiniowanej przez użytkownika

W poniższym przykładzie odświeża funkcja zdefiniowanej przez użytkownika.W przykładzie zostanie utworzony typem danych alias mytype, a funkcja zdefiniowana przez użytkownika to_upper, który korzysta z mytype. Następnie, mytype Nazwa jest zmieniana myoldtype, a nowy mytype zostanie utworzony ma inną definicję. The dbo.to_upper funkcja is refreshed so that it references the new implementation of mytype, instead of the old one.

-- Create an alias type.
USE AdventureWorks;
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.Odświeżanie wyzwalacz DLL poziom bazy danych

W poniższym przykładzie odświeża wyzwalacz DLL poziom bazy danych.

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

C.Odświeżanie wyzwalacz serwera-poziom DDL

W poniższym przykładzie odświeża wyzwalacz DLL poziomie serwera.

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