sp_refreshsqlmodule (Transact-SQL)

Nouveau : 12 décembre 2006

Met à jour les métadonnées pour la procédure stockée non liée à un schéma, la fonction définie par l'utilisateur ou la vue. Les métadonnées persistantes pour ces objets, des types de données des paramètres par exemple, peuvent devenir obsolètes en raison des modifications apportées à leurs objets sous-jacents.

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

sp_refreshsqlmodule [ @name = ] 'module_name' 

Arguments

  • [ @name= ] 'module_name'
    Nom de la procédure stockée, de la fonction ou de la vue. module_name ne peut pas être une procédure stockée CLR (Common Language Runtime) ou une fonction CLR. module_name ne peut pas être lié à un schéma. module_name est de type nvarchar et n'a pas de valeur par défaut. module_name peut être un identificateur multipartie, mais ne peut faire référence qu'à des objets de la base de données active.

Notes

sp_refreshsqlmodule doit être exécutée lorsque des modifications sont apportées aux objets sous-jacents de la procédure stockée, de la fonction définie par l'utilisateur ou de la vue qui affectent sa définition. Sinon, l'objet risque de produire des résultats inattendus en cas d'interrogation ou d'invocation. Pour actualiser une vue, vous pouvez faire appel à sp_refreshsqlmodule ou sp_refreshview qui retournent les mêmes résultats.

sp_refreshsqlmodule n'affecte pas les autorisations, les propriétés étendues ou les options SET qui sont associées à l'objet.

Les signatures qui sont associées à l'objet sont supprimées si vous exécutez sp_refreshsqlmodule.

Autorisations

Requiert l'autorisation ALTER sur la procédure stockée, la fonction ou la vue ainsi que l'autorisation REFERENCES sur les types CLR (Common Language Runtime) définis par l'utilisateur et sur les collections de schémas XML référencés par l'objet.

De plus, pour les modules définis à l'aide de la clause EXECUTE AS, l'autorisation IMPERSONATE est nécessaire sur l'entité de sécurité spécifiée. Généralement, l'actualisation d'un objet ne modifie pas son entité de sécurité EXECUTE AS sauf si le module est défini avec EXECUTE AS USER et que le nom d'utilisateur de l'entité de sécurité correspond désormais à un autre utilisateur que celui lors de la création du module.

Valeurs du code de retour

0 (succès) ou nombre non nul (échec)

Exemples

L'exemple suivant actualise une fonction définie par l'utilisateur. L'exemple crée un type de données d'alias, mytype, et une fonction définie par l'utilisateur, to_upper, qui utilise mytype. Puis, le nom mytype est remplacé par myoldtype, et un nouveau mytype est créé avec une autre définition. La fonction to_upper est actualisée afin de référencer la nouvelle implémentation de mytype en remplacement de l'ancienne.

-- 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 ('to_upper', 'FN') IS NOT NULL
DROP FUNCTION to_upper;
GO

CREATE FUNCTION 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

Voir aussi

Référence

sp_refreshview (Transact-SQL)
Procédures stockées du moteur de base de données (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005