sql >> Database >  >> RDS >> Sqlserver

Hoe OBJECTPROPERTY() werkt in SQL Server

In SQL Server, de OBJECTPROPERTY() functie retourneert informatie over objecten met schemabereik in de huidige database.

Deze objecten met schemabereik zijn degene die u kunt zien door de sys.objects . op te vragen systeemcatalogus bekijken. Het kan niet worden gebruikt voor objecten die niet binnen een schema vallen.

U kunt OBJECTPROPERTY() . gebruiken om te controleren of een object een tabel, weergave, opgeslagen procedure, enz. is. U kunt het ook gebruiken om te controleren of een tabel een primaire sleutel, externe sleutel, externe sleutelreferentie, enz. heeft.

Syntaxis

De syntaxis is eenvoudig. De functie accepteert twee argumenten:de ID van het object en de eigenschap die u wilt retourneren.

OBJECTPROPERTY ( id , property )

Voorbeeld 1 – Basisgebruik

Hier is een voorbeeld om het basisgebruik van deze functie te demonstreren.

SELECT OBJECTPROPERTY('885578193', 'IsTable') AS Result;

Resultaat:

+----------+
| Result   |
|----------|
| 1        |
+----------+

In dit geval is er een object met een ID van 885578193 en het is een tafel.

Ik weet dat het een tabel is omdat het resultaat van de IsTable eigenschap is 1 . Als het object geen tabel was, zou het resultaat hier 0 . zijn .

Voorbeeld 2 – Het object een naam geven

In het vorige voorbeeld kende ik de ID van het object. In de meeste gevallen weet u waarschijnlijk alleen de naam van het object, maar niet de ID. In dergelijke gevallen kunt u de OBJECT_ID() . gebruiken functie om de ID van het object te krijgen, gebaseerd op de naam.

Zoals dit:

SELECT OBJECTPROPERTY(OBJECT_ID(N'Artists'), 'IsTable') AS Result;

Resultaat:

+----------+
| Result   |
|----------|
| 1        |
+----------+

Voorbeeld 3 – Naam gekwalificeerd object

Bij het aanroepen van de OBJECT_ID() functie, kunt u ook een twee- of driedelige naam opgeven (om de schemanaam en de databasenaam op te nemen).

SELECT OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS Result;

Resultaat:

+----------+
| Result   |
|----------|
| 1        |
+----------+

Laat u echter niet misleiden door te denken dat OBJECTPROPERTY() zal die database gebruiken. Het zal niet (tenzij het hetzelfde is als de huidige database). Wat het betreft ontvangt het gewoon een object-ID. Als u dit vergeet, kan dit leiden tot een misleidend resultaat.

Hier is een voorbeeld om te demonstreren.

USE WideWorldImportersDW;
SELECT 
  OBJECT_ID(N'Music.dbo.Artists') AS [OBJECT_ID],
  OBJECT_NAME(OBJECT_ID(N'Music.dbo.Artists')) AS [OBJECT_NAME],
  OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS [IsTable];

USE Music;
SELECT 
  OBJECT_ID(N'Music.dbo.Artists') AS [OBJECT_ID],
  OBJECT_NAME(OBJECT_ID(N'Music.dbo.Artists')) AS [OBJECT_NAME],
  OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS [IsTable];

Resultaat:

Changed database context to 'WideWorldImportersDW'.
+-------------+---------------+-----------+
| OBJECT_ID   | OBJECT_NAME   | IsTable   |
|-------------+---------------+-----------|
| 885578193   | CityKey       | 0         |
+-------------+---------------+-----------+
(1 row affected)
Changed database context to 'Music'.
+-------------+---------------+-----------+
| OBJECT_ID   | OBJECT_NAME   | IsTable   |
|-------------+---------------+-----------|
| 885578193   | Artists       | 1         |
+-------------+---------------+-----------+
(1 row affected)

In dit voorbeeld hebben twee verschillende databases toevallig een object met dezelfde ID. De ene is een tafel en de andere niet. We krijgen dus een negatief resultaat in de eerste zoekopdracht en een positief resultaat in de tweede.

Voorbeeld 4 – Meer eigenschappen

Hier is een voorbeeld dat meer eigenschappen retourneert.

USE WideWorldImportersDW;
DECLARE @objectId int = OBJECT_ID(N'Dimension.City');
SELECT 
  OBJECTPROPERTY(@objectId, 'OwnerId') AS OwnerId,
  OBJECTPROPERTY(@objectId, 'SchemaId') AS SchemaId,
  OBJECTPROPERTY(@objectId, 'IsTable') AS IsTable,
  OBJECTPROPERTY(@objectId, 'TableHasPrimaryKey') AS TableHasPrimaryKey,
  OBJECTPROPERTY(@objectId, 'TableHasForeignKey') AS TableHasForeignKey,
  OBJECTPROPERTY(@objectId, 'TableHasForeignRef') AS TableHasForeignRef,
  OBJECTPROPERTY(@objectId, 'TableHasIdentity') AS TableHasIdentity;

Resultaat (met verticale uitvoer):

OwnerId            | 1
SchemaId           | 6
IsTable            | 1
TableHasPrimaryKey | 1
TableHasForeignKey | 0
TableHasForeignRef | 1
TableHasIdentity   | 0

Dit zijn slechts enkele van de 103 eigenschappen die u kunt opvragen OBJECTPROPERTY() voor. Zie hieronder voor een volledige lijst.

Voorbeeld 5 – In een WHERE-clausule

U kunt OBJECTPROPERTY() . gebruiken in een WHERE clausule indien nodig.

In dit voorbeeld voer ik twee query's uit:een die tabellen retourneert met een externe sleutel en een die tabellen retourneert waarnaar wordt verwezen door een externe sleutel.

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

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

Resultaat:

Changed database context to 'WideWorldImporters'.
+-------------+-----------------------+
| Schema      | Table                 |
|-------------+-----------------------|
| Warehouse   | Colors                |
| Sales       | OrderLines            |
| Warehouse   | PackageTypes          |
| Warehouse   | StockGroups           |
| Warehouse   | StockItemStockGroups  |
| Application | StateProvinces        |
| Sales       | CustomerTransactions  |
| Application | Cities                |
| Application | SystemParameters      |
| Sales       | InvoiceLines          |
| Purchasing  | Suppliers             |
| Warehouse   | StockItemTransactions |
| Sales       | Customers             |
| Purchasing  | PurchaseOrders        |
| Sales       | Orders                |
| Application | People                |
| Warehouse   | StockItems            |
| Application | Countries             |
| Warehouse   | StockItemHoldings     |
| Purchasing  | PurchaseOrderLines    |
| Application | DeliveryMethods       |
| Application | PaymentMethods        |
| Purchasing  | SupplierTransactions  |
| Application | TransactionTypes      |
| Sales       | SpecialDeals          |
| Purchasing  | SupplierCategories    |
| Sales       | BuyingGroups          |
| Sales       | Invoices              |
| Sales       | CustomerCategories    |
+-------------+-----------------------+
(29 rows affected)
+-------------+--------------------+
| Schema      | Table              |
|-------------+--------------------|
| Warehouse   | Colors             |
| Warehouse   | PackageTypes       |
| Warehouse   | StockGroups        |
| Application | StateProvinces     |
| Application | Cities             |
| Purchasing  | Suppliers          |
| Sales       | Customers          |
| Purchasing  | PurchaseOrders     |
| Sales       | Orders             |
| Application | People             |
| Warehouse   | StockItems         |
| Application | Countries          |
| Application | DeliveryMethods    |
| Application | PaymentMethods     |
| Application | TransactionTypes   |
| Purchasing  | SupplierCategories |
| Sales       | BuyingGroups       |
| Sales       | Invoices           |
| Sales       | CustomerCategories |
+-------------+--------------------+
(19 rows affected)

Volledige lijst van eigendommen

Hier is een volledige lijst met eigenschappen die worden ondersteund door OBJECTPROPERTY() :

  • 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
  • HasDeleteTrigger
  • HasInsertTrigger
  • HasInsteadOfTrigger
  • HasUpdateTrigger
  • IsAnsiNullsOn
  • IsCheckCnst
  • IsConstraint
  • IsDefault
  • IsDefaultCnst
  • IsDeterministisch
  • IsEncrypted
  • IsUitgevoerd
  • IsExtendedProc
  • IsForeignKey
  • IsIndexed
  • IsIndexable
  • IsInlineFunction
  • IsMSShipped
  • IsPrimaryKey
  • IsProcedure
  • IsQuotedIdentOn
  • IsQueue
  • IsReplProc
  • IsRule
  • IsScalarFunction
  • IsSchemaBound
  • IsSystemTable
  • IsSystemVerified
  • IsTable
  • IsTableFunction
  • IsTrigger
  • IsUniqueCnst
  • IsUserTable
  • IsView
  • OwnerId
  • SchemaId
  • TableDeleteTrigger
  • TableDeleteTriggerCount
  • TableFullTextMergeStatus
  • TableFullTextBackgroundUpdateIndexOn
  • TableFulltextCatalogId
  • TableFulltextChangeTrackingOn
  • TableFulltextDocsProcessed
  • TableFulltextFailCount
  • TableFulltextItemCount
  • TableFulltextKeyColumn
  • TableFulltextPendingChanges
  • TableFulltextPopulateStatus
  • 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
  • TableHasColumnSet
  • TableTemporalType

Zie de Microsoft-documentatie voor een gedetailleerde uitleg van elke eigenschap.


  1. Een CSV importeren naar MySQL met een ander datumformaat

  2. Hoe MySQL JDBC 08001 Databaseverbindingsfout op te lossen?

  3. Wat is Ongedaan maken en opnieuw doen in de Oracle-database?

  4. orakel - welke uitspraken moeten worden gedaan?