Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come funziona OBJECTPROPERTYEX() in SQL Server

In SQL Server, il OBJECTPROPERTYEX() La funzione restituisce informazioni sugli oggetti con ambito schema nel database corrente.

Questa funzione fa esattamente la stessa cosa di OBJECTPROPERTY() , tranne per il fatto che supporta più proprietà e il valore restituito è diverso. Il OBJECTPROPERTYEX() la funzione restituisce una variante_sql tipo, mentre OBJECTPROPERTY() restituisce un int digitare.

Sintassi

La funzione accetta due argomenti:l'ID dell'oggetto e la proprietà che vuoi restituire.

OBJECTPROPERTYEX ( id , property )

Esempio 1 – Utilizzo di base

Ecco un esempio per dimostrare l'utilizzo di base di questa funzione.

SELECT OBJECTPROPERTYEX('885578193', 'BaseType') AS Result;

Risultato:

+----------+
| Result   |
|----------|
| U        |
+----------+

In questo caso, c'è un oggetto con un ID 885578193 ed è un tavolo Il BaseType di questo oggetto è U.

Esempio 2 – Assegnare un nome all'oggetto

Nell'esempio precedente, conoscevo l'ID dell'oggetto. Nella maggior parte dei casi probabilmente conoscerai solo il nome dell'oggetto, ma non il suo ID. In questi casi, puoi utilizzare OBJECT_ID() funzione per ottenere l'ID dell'oggetto, in base al suo nome.

In questo modo:

SELECT OBJECTPROPERTYEX(OBJECT_ID(N'Artists'), 'BaseType') AS Result;

Risultato:

+----------+
| Result   |
|----------|
| U        |
+----------+

Esempio 3 – Altre proprietà

Ecco un esempio che restituisce più proprietà che non ti verranno restituite con OBJECTPROPERTY() .

USE WideWorldImportersDW;
DECLARE @objectId int = OBJECT_ID(N'Integration.GenerateDateDimensionColumns');
SELECT 
  OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType,
  OBJECTPROPERTYEX(@objectId, 'IsPrecise') AS IsPrecise,
  OBJECTPROPERTYEX(@objectId, 'SystemDataAccess') AS SystemDataAccess,
  OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess;

Risultato:

+------------+-------------+--------------------+------------------+
| BaseType   | IsPrecise   | SystemDataAccess   | UserDataAccess   |
|------------+-------------+--------------------+------------------|
| IF         | 0           | 1                  | 1                |
+------------+-------------+--------------------+------------------+

Al momento della scrittura, il OBJECTPROPERTYEX() la funzione supporta 109 proprietà. Vedi sotto per un elenco completo delle proprietà supportate da questa funzione.

Esempio 4 – In una clausola WHERE

Puoi usare OBJECTPROPERTYEX() in un WHERE clausola se richiesta.

In questo esempio, eseguo due query:una che restituisce tabelle che hanno una chiave esterna e una che restituisce tabelle a cui fa riferimento una chiave esterna.

USE Music;
SELECT 
  SCHEMA_NAME(schema_id) AS [Schema], 
  name AS [Table]
FROM sys.tables
WHERE OBJECTPROPERTYEX(object_id, 'TableHasForeignKey') = 1;

SELECT 
  SCHEMA_NAME(schema_id) AS [Schema], 
  name AS [Table]
FROM sys.tables
WHERE OBJECTPROPERTYEX(object_id, 'TableHasForeignRef') = 1;

Risultato:

Changed database context to 'Music'.
+----------+---------+
| Schema   | Table   |
|----------+---------|
| dbo      | Artists |
| dbo      | Albums  |
+----------+---------+
(2 rows affected)
+----------+---------+
| Schema   | Table   |
|----------+---------|
| dbo      | Artists |
| dbo      | Genres  |
| dbo      | Country |
+----------+---------+
(3 rows affected)

Elenco completo delle proprietà

Ecco un elenco completo delle proprietà supportate da OBJECTPROPERTYEX() funzione:

  • Tipo Base
  • CnstIsClustKey
  • CnstIsColumn
  • CnstIsDeleteCascade
  • CnstIsDisabled
  • CnstIsNonclustKey
  • CnstIsNotRepl
  • CnstIsNotTrusted
  • CnstIsUpdateCascade
  • ExecIsAfterTrigger
  • ExecIsAnsiNullsOn
  • ExecIsDeleteTrigger
  • ExecIsFirstDeleteTrigger
  • ExecIsFirstInsertTrigger
  • ExecIsFirstUpdateTrigger
  • ExecIsInsertTrigger
  • ExecIsInsteadOfTrigger
  • ExecIsLastDeleteTrigger
  • ExecIsLastInsertTrigger
  • ExecIsLastUpdateTrigger
  • ExecIsQuotedIdentOn
  • ExecIsStartup
  • ExecIsTriggerDisabled
  • ExecIsTriggerNotForRepl
  • ExecIsUpdateTrigger
  • ExecIsWithNativeCompilation
  • HasAfterTrigger
  • HaDeleteTrigger
  • HasInsertTrigger
  • HasInsteadOfTrigger
  • Ha UpdateTrigger
  • IsAnsiNullsOn
  • IsCheckCnst
  • È un vincolo
  • È predefinito
  • IsDefaultCnst
  • È deterministico
  • È crittografato
  • Eseguito
  • IsExtendedProc
  • ÈForeignKey
  • È indicizzato
  • È indicizzabile
  • Funzione IsInline
  • È spedito
  • È preciso
  • È la chiave primaria
  • È una procedura
  • IsQuotedIdentOn
  • È in coda
  • IsReplProc
  • È la regola
  • Funzione IsScalar
  • IsSchemaBound
  • IsSystemTable
  • IsSystemVerified
  • È la tabella
  • Funzione IsTable
  • È Trigger
  • IsUniqueCnst
  • IsUserTable
  • IsView
  • ID proprietario
  • SchemaId
  • Accesso ai dati di sistema
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFullTextChangeTrackingOn
  • TableFulltextDocsProcessed
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TableFulltextKeyColumn
  • TableFulltextPendingChanges
  • TableFulltextPopulateStatus
  • TableFullTextSemanticExtraction
  • TableHasActiveFulltextIndex
  • TableHasCheckCnst
  • TableHasClustIndex
  • TableHasDefaultCnst
  • TableHasDeleteTrigger
  • TableHasForeignKey
  • TableHasForeignRef
  • TableHasIdentity
  • TableHasIndex
  • TableHasInsertTrigger
  • TableHasNonclustIndex
  • TableHasPrimaryKey
  • TableHasRowGuidCol
  • TableHasTextImage
  • TableHasTimestamp
  • TableHasUniqueCnst
  • TableHasUpdateTrigger
  • TableHasVarDecimalStorageFormat
  • TableInsertTrigger
  • TableInsertTriggerCount
  • TableIsFake
  • TableIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • TableIsPinned
  • TableTextInRowLimit
  • TableUpdateTrigger
  • TableUpdateTriggerCount
  • Accesso ai dati utente
  • TableHasColumnSet
  • Cardinalità
  • TipoTableTemporal

Consulta la documentazione Microsoft per una spiegazione dettagliata di ciascuna proprietà.

Vedi anche OBJECTPROPERTY() rispetto a OBJECTPROPERTYEX() per una spiegazione più dettagliata delle differenze tra queste due funzioni.