OBJECTPROPERTY (Transact-SQL)
Data aggiornamento: 12 dicembre 2006
Restituisce informazioni sugli oggetti con ambito schema nel database corrente. Per un elenco degli oggetti con ambito schema, vedere sys.objects (Transact-SQL). Questa funzione non può essere utilizzata per gli oggetti che non sono definiti a livello di ambito schema, ad esempio i trigger DDL (Data Definition Language) e le notifiche di eventi.
Convenzioni della sintassi Transact-SQL
Sintassi
OBJECTPROPERTY ( id , property )
Argomenti
- id
Espressione che rappresenta l'ID dell'oggetto nel database corrente. id è di tipo int e viene considerato un oggetto con ambito schema nel contesto del database corrente.
property
Espressione che rappresenta le informazioni da restituire per l'oggetto specificato dall'argomento id. I possibili valori per l'argomento property sono i seguenti.[!NOTA] Se non specificato diversamente, viene restituito NULL quando property non è un nome di proprietà valido, id non è un ID di oggetto valido, id è un tipo di oggetto non supportato per l'argomento property specificato oppure il chiamante non dispone delle autorizzazioni necessarie per visualizzare i metadati dell'oggetto.
Nome proprietà
Tipi restituiti
int
Eccezioni
Restituisce NULL in caso di errore o se un chiamante non dispone dell'autorizzazione necessaria per visualizzare l'oggetto.
In SQL Server 2005 un utente può visualizzare esclusivamente i metadati delle entità a protezione diretta di cui è proprietario o per cui ha ricevuto un'autorizzazione. Di conseguenza, le funzioni predefinite di creazione dei metadati come OBJECTPROPERTY possono restituire NULL se l'utente non dispone di alcuna autorizzazione per l'oggetto. Per ulteriori informazioni, vedere Configurazione della visibilità dei metadati e Risoluzione dei problemi relativi alla visibilità dei metadati.
Osservazioni
Motore di database presuppone che object_id sia contenuto nel contesto del database corrente. Una query che fa riferimento a object_id in un altro database restituirà NULL o risultati non corretti. Ad esempio, nella query seguente il contesto di database corrente è il database master
. Motore di database tenterà di restituire il valore della proprietà per object_id specificato in quel database invece del database specificato nella query. La query restituisce risultati non corretti perché la vista vEmployee
non è contenuta nel database master
.
USE master;
GO
SELECT OBJECTPROPERTY(OBJECT_ID(N'AdventureWorks.HumanResources.vEmployee'), 'IsView');
GO
OBJECTPROPERTY(view_id, 'IsIndexable') può richiedere una quantità elevata di memoria perché la valutazione della proprietà IsIndexable richiede l'analisi della definizione, normalizzazione e ottimizzazione parziale della vista. Sebbene la proprietà IsIndexable identifichi le tabelle o le viste che possono essere indicizzate, l'effettiva creazione dell'indice ha esito negativo se non vengono rispettati determinati requisiti della chiave dell'indice. Per ulteriori informazioni, vedere CREATE INDEX (Transact-SQL).
OBJECTPROPERTY(table_id 'TableHasActiveFulltextIndex') restituisce 1 (True) quando almeno una colonna di una tabella viene aggiunta per l'indicizzazione. L'indicizzazione full-text risulta attiva per il popolamento non appena si aggiunge la prima colonna da indicizzare.
Durante la creazione di una tabella l'opzione QUOTED IDENTIFIER viene sempre archiviata con l'impostazione ON nei metadati della tabella anche se l'opzione è stata precedentemente impostata su OFF. Pertanto, OBJECTPROPERTY(table_id, 'IsQuotedIdentOn') restituirà sempre 1 (True).
Esempi
A. Verifica di un oggetto in una tabella
Nell'esempio seguente viene verificato se UnitMeasure
è una tabella nel database AdventureWorks
.
USE AdventureWorks;
GO
IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 1
PRINT 'UnitMeasure is a table.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') = 0
PRINT 'UnitMeasure is not a table.'
ELSE IF OBJECTPROPERTY (OBJECT_ID(N'Production.UnitMeasure'),'ISTABLE') IS NULL
PRINT 'ERROR: UnitMeasure is not a valid object.';
GO
B. Verifica se una funzione definita dall'utente con valori scalari è deterministica
Nell'esempio seguente viene verificato se la funzione definita dall'utente con valori scalari ufnGetProductDealerPrice
, che restituisce un valore money, è o meno deterministica.
USE AdventureWorks;
GO
SELECT OBJECTPROPERTY(OBJECT_ID('dbo.ufnGetProductDealerPrice'), 'IsDeterministic');
GO
Il set di risultati indica che ufnGetProductDealerPrice
non è una funzione deterministica.
-----
0
C. Ricerca di oggetti appartenenti a uno schema specifico
Nell'esempio seguente viene utilizzata la proprietà SchemaId
per restituire tutti gli oggetti che appartengono allo schema Production
.
USE AdventureWorks;
GO
SELECT name, object_id, type_desc
FROM sys.objects
WHERE OBJECTPROPERTY(object_id, N'SchemaId') = SCHEMA_ID(N'Production')
ORDER BY type_desc, name;
GO
Vedere anche
Riferimento
COLUMNPROPERTY (Transact-SQL)
Funzioni per i metadati (Transact-SQL)
OBJECTPROPERTYEX (Transact-SQL)
ALTER AUTHORIZATION (Transact-SQL)
TYPEPROPERTY (Transact-SQL)
sys.objects (Transact-SQL)
Altre risorse
Separazione fra schema e utente
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
12 dicembre 2006 |
|
17 luglio 2006 |
|
5 dicembre 2005 |
|