Udostępnij za pośrednictwem


sp_refreshsqlmodule (języka Transact-SQL)

Aktualizacja metadane dla określonego schematu granica procedura składowana, zdefiniowanej przez użytkownika funkcja, widoku, DML wyzwalacza, bazy danych -poziom DDL wyzwalacza lub serwer -poziom DDL w bieżącej bazie danych.Trwałe metadane dla tych obiektów, takich jak typy danych parametrów, może stać się nieaktualne z powodu zmiany ich pod nim obiekty.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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

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

Argumenty

  • [ @name= ] 'module_name'
    Jest nazwą procedura składowana, zdefiniowanej przez użytkownika funkcja, widok, DML wyzwalacza, bazy danych -poziom DDL wyzwalacza lub serwer -poziom DDL .module_namenie może być wspólne runtime (CLR) języka procedura składowana lub funkcja CLR.module_namenie może być związanych ze schematem.module_namejest nvarchar, z braku domyślne.module_namemoże być identyfikatorem wieloczęściowego, ale może odnosić się tylko do obiektów w bieżącej bazie danych.

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

    <class>is nvarchar(20).

Wartości kodów powrotnych

0 (sukces) lub liczbę różną od zera (błąd)

Uwagi

sp_refreshsqlmodulepowinien być uruchamiany, gdy zostaną wprowadzone zmiany do obiektów podstawowych modułu, które wpływają na jego definicji.W przeciwnym razie modułu może dawać nieoczekiwane wyniki , gdy jest kwerenda lub wywołać.Aby odświeżyć widok, można użyć albo sp_refreshsqlmodule lub sp_refreshview z takich samych wyniki.

sp_refreshsqlmodulenie wpływa na wszystkie uprawnienia, właściwości rozszerzonych, lub ustaw opcje, które są skojarzone z obiektem.

Aby odświeżyć serwer -poziom DDL wyzwalacz, wykonać tej procedura składowana z kontekstu dowolnej bazy danych.

Ostrzeżenie

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

Uprawnienia

Wymaga ZMIEŃ uprawnienia w module i odwołania na typy zdefiniowane przez użytkownika CLR i kolekcje schematu XML, które odwołuje się obiekt.Wymaga uprawnień ALTER DATABASE dowolnego DDL WYZWALACZA w bieżącej bazie danych, gdy określonego modułu bazy danych -poziom DDL wyzwalacza.Wymaga uprawnień sterowania SERWEREM, gdy określonego modułu serwera -poziom DDL wyzwalacza.

Ponadto dla modułów, które są zdefiniowane przy użyciu EXECUTE klauzulawymagane jest uprawnienie PERSONIFIKUJ określonego kapitału.Ogólnie rzecz biorąc, odświeżanie obiektu nie zmienia jej wykonywanie jako podmiot, chyba że moduł zostało zdefiniowane przy użyciu wykonywać jako użytkownik i nazwa użytkownika głównego zobowiązanego rozpoznaje teraz do innego użytkownika niż w czas modułu został utworzony.

Przykłady

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

Poniższy przykład odświeża zdefiniowanej przez użytkownika funkcja.W przykładzie tworzone typem danych alias mytypei zdefiniowane przez użytkownika funkcja, to_upper, który korzysta z mytype.Następnie mytype jest zmieniana na myoldtypei nowy mytype jest tworzony ma inną definicję.dbo.to_upperfunkcja jest odświeżany tak, aby odwołania do realizacji nowych mytype, zamiast starego.

-- Create an alias type.
USE AdventureWorks2008R2;
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 bazy danych -poziom DDL wyzwalacza

Poniższy przykład odświeża bazy danych -poziom DDL wyzwalacza.

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

C.Odświeżanie server -poziom DDL wyzwalacza

Poniższy przykład odświeża server -poziom DDL wyzwalacza.

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