Condividi tramite


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.

Icona di collegamento a un argomentoConvenzioni 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

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

12 dicembre 2006

Nuovo contenuto:
  • Aggiunta della proprietà TableHasVarDecimalStorageFormat disponibile nel Service Pack 2.

17 luglio 2006

Nuovo contenuto:
  • Aggiunta della sezione "Eccezioni".

5 dicembre 2005

Contenuto modificato
  • Correzione della definizione delle proprietà IsTableFunction e IsScalarFunction.
  • Modifica dell'esempio C.