Share via


sp_refreshsqlmodule (Transact-SQL)

Data creazione: 12 dicembre 2006

Aggiorna i metadati per la stored procedure, la funzione definita dall'utente o la vista non associata a schema specificata. I metadati persistenti per questi oggetti, come i tipi di dati dei parametri, possono diventare obsoleti in seguito a modifiche degli oggetti sottostanti.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_refreshsqlmodule [ @name = ] 'module_name' 

Argomenti

  • [ @name= ] 'module_name'
    Nome della stored procedure, funzione o vista. module_name non può essere una stored procedure o una funzione CLR (Common Language Runtime). module_name non può corrispondere a un oggetto associato a schema. module_name è di tipo nvarchar e non prevede alcun valore predefinito. module_name può essere un identificatore in più parti, ma esclusivamente riferito a oggetti nel database corrente.

Osservazioni

È consigliabile eseguire sp_refreshsqlmodule quando vengono apportate modifiche agli oggetti sottostanti la stored procedure, la funzione definita dall'utente o la vista, che influiscono sulla definizione. In caso contrario, le query o le chiamate su tali oggetti potrebbero generare risultati imprevisti. Per aggiornare una vista, è possibile utilizzare sp_refreshsqlmodule o sp_refreshview con risultati identici.

L'esecuzione di sp_refreshsqlmodule non influisce sulle autorizzazioni, le proprietà estese o le opzioni SET associate all'oggetto.

Le eventuali firme associate all'oggetto vengono eliminate quando si esegue sp_refreshsqlmodule.

Autorizzazioni

Sono necessarie l'autorizzazione ALTER per la stored procedure, la funzione o la vista e l'autorizzazione REFERENCES per i tipi CLR definiti dall'utente e gli insiemi di schemi XML a cui fa riferimento l'oggetto.

Per i moduli definiti nella clausola EXECUTE AS è inoltre richiesta l'autorizzazione IMPERSONATE per l'entità specificata. In genere, l'aggiornamento di un oggetto non comporta modifiche per l'entità EXECUTE AS corrispondente, a meno che il modulo non venga definito con EXECUTE AS USER e il nome utente dell'entità non venga risolto in seguito in un utente diverso da quello utilizzato al momento della creazione del modulo.

Valori restituiti

0 (esito positivo) o un numero diverso da zero (esito negativo)

Esempi

Nell'esempio seguente viene aggiornata una funzione definita dall'utente. Nell'esempio vengono creati il tipo di dati alias mytype e la funzione definita dall'utente to_upper che utilizza mytype. Il tipo di dati mytype viene quindi rinominato in myoldtype e viene creato un nuovo mytype con una diversa definizione. La funzione to_upper viene poi aggiornata in modo da fare riferimento alla nuova implementazione di mytype, anziché alla precedente.

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

Vedere anche

Riferimento

sp_refreshview (Transact-SQL)
Stored procedure del Motore di database (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005