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

Sådan fungerer OBJECTPROPERTYEX() i SQL Server

I SQL Server er OBJECTPROPERTYEX() funktion returnerer information om skema-omfattede objekter i den aktuelle database.

Denne funktion gør nøjagtig det samme som OBJECTPROPERTY() , bortset fra at den understøtter flere egenskaber, og returværdien er anderledes. OBJECTPROPERTYEX() funktion returnerer en sql_variant type, hvorimod OBJECTPROPERTY() returnerer en int type.

Syntaks

Funktionen accepterer to argumenter:objektets ID og den egenskab, du ønsker returneret.

OBJECTPROPERTYEX ( id , property )

Eksempel 1 – Grundlæggende brug

Her er et eksempel for at demonstrere den grundlæggende brug af denne funktion.

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

Resultat:

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

I dette tilfælde er der et objekt med et ID på 885578193 og det er et bord. BaseType af dette objekt er U.

Eksempel 2 – Navngivning af objektet

I det forrige eksempel kendte jeg objektets ID. I de fleste tilfælde kender du sandsynligvis kun objektets navn, men ikke dets ID. I sådanne tilfælde kan du bruge OBJECT_ID() funktion for at få objektets ID, baseret på dets navn.

Sådan:

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

Resultat:

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

Eksempel 3 – Flere egenskaber

Her er et eksempel, der returnerer flere af de egenskaber, som du ikke får returneret med 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;

Resultat:

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

I skrivende stund er OBJECTPROPERTYEX() funktion understøtter 109 egenskaber. Se nedenfor for en komplet liste over egenskaber, der understøttes af denne funktion.

Eksempel 4 – I en WHERE-klausul

Du kan bruge OBJECTPROPERTYEX() i en WHERE klausul om nødvendigt.

I dette eksempel kører jeg to forespørgsler:en, der returnerer tabeller, der har en fremmednøgle, og en, der returnerer tabeller, der refereres til af en fremmednøgle.

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;

Resultat:

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)

Fuld liste over egenskaber

Her er en komplet liste over egenskaber, der understøttes af OBJECTPROPERTYEX() funktion:

  • BaseType
  • 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
  • HarAfterTrigger
  • HasDeleteTrigger
  • HasInsertTrigger
  • HasInsteadOfTrigger
  • HasUpdateTrigger
  • IsAnsiNullsOn
  • IsCheckCnst
  • IsConstraint
  • Er Default
  • IsDefaultCnst
  • Er deterministisk
  • Er Krypteret
  • Udføres
  • IsExtendedProc
  • IsForeignKey
  • Er indekseret
  • Kan indekseres
  • IsInlineFunction
  • ErMSShipped
  • Er Præcis
  • IsPrimary Key
  • IsProcedure
  • IsQuotedIdentOn
  • IsQueue
  • IsReplProc
  • IsRule
  • IsScalarFunction
  • IsSchemaBound
  • IsSystemTable
  • Er SystemVerified
  • IsTable
  • IsTableFunction
  • IsTrigger
  • IsUniqueCnst
  • IsUserTable
  • IsView
  • OwnerId
  • SchemaId
  • SystemDataAccess
  • TabelDeleteTrigger
  • TabelDeleteTriggerCount
  • TableFullTextMergeStatus
  • TabelFuldTekstBaggrundUpdateIndexOn
  • TabelFuldtekstCatalogId
  • TabelFuldTekstChangeTrackingOn
  • TabelFuldtekstdokumenter behandlet
  • TableFulltextFailCount
  • TabelFuldtekstItemCount
  • TabelFuldtekstNøglekolonne
  • TabelFuldtekstVentende ændringer
  • TabelFuldtekstBefolkningsstatus
  • TabelFuldTekstSemantisk Uddrag
  • TabelHasActiveFulltextIndex
  • TableHasCheckCnst
  • TabelHasClustIndex
  • TabelHasDefaultCnst
  • TabelHasDeleteTrigger
  • TabelHas ForeignKey
  • TabelHas ForeignRef
  • TabelHasIdentity
  • TabelHasIndex
  • TabelHasInsertTrigger
  • TabelHasNonclustIndex
  • TabelHasPrimaryKey
  • TableHasRowGuidCol
  • TableHasTextImage
  • TabelHasTimestamp
  • TabelHasUniqueCnst
  • TabelHasUpdateTrigger
  • TabelHasVarDecimalStorageFormat
  • TableInsertTrigger
  • TabelInsertTriggerCount
  • TabelErFalsk
  • TabelIsLockedOnBulkLoad
  • TableIsMemoryOptimized
  • Tabel er fastgjort
  • TableTextInRowLimit
  • TableUpdateTrigger
  • TabelUpdateTriggerCount
  • Brugerdataadgang
  • TabelHasColumnSet
  • Kardinalitet
  • TableTemporalType

Se Microsoft-dokumentationen for en detaljeret forklaring af hver egenskab.

Se også OBJECTPROPERTY() vs OBJECTPROPERTYEX() for en mere detaljeret forklaring af forskellene mellem disse to funktioner.


  1. Hvordan opretter man indeks på JSON-feltet i Postgres?

  2. Sådan implementeres PostgreSQL for høj tilgængelighed

  3. Returner id, hvis der findes en række, INSERT ellers

  4. Hvordan indsætter man en post og returnerer det nyoprettede ID ved hjælp af en enkelt SqlCommand?