SQL Serverでは、OBJECTPROPERTY()
関数は、現在のデータベース内のスキーマスコープのオブジェクトに関する情報を返します。
これらのスキーマスコープのオブジェクトは、sys.objects
をクエリすることで確認できるオブジェクトです。 システムカタログビュー。スキーマスコープではないオブジェクトには使用できません。
OBJECTPROPERTY()
を使用できます オブジェクトがテーブル、ビュー、ストアドプロシージャなどであるかどうかを確認します。また、テーブルに主キー、外部キー、外部キー参照などがあるかどうかを確認するためにも使用できます。
構文
構文は単純です。この関数は、オブジェクトのIDと返されるプロパティの2つの引数を受け入れます。
OBJECTPROPERTY ( id , property )
例1-基本的な使用法
この関数の基本的な使用法を示す例を次に示します。
SELECT OBJECTPROPERTY('885578193', 'IsTable') AS Result;
結果:
+----------+ | Result | |----------| | 1 | +----------+
この場合、IDが885578193
のオブジェクトがあります そしてそれはテーブルです。
IsTable
の結果であるため、これはテーブルであることがわかります。 プロパティは1
です 。オブジェクトがテーブルでない場合、ここでの結果は0
になります。 。
例2–オブジェクトの命名
前の例では、オブジェクトのIDを知っていました。ほとんどの場合、オブジェクトの名前だけがわかり、IDはわかりません。このような場合は、OBJECT_ID()
を使用できます 名前に基づいてオブジェクトのIDを取得する関数。
このように:
SELECT OBJECTPROPERTY(OBJECT_ID(N'Artists'), 'IsTable') AS Result;
結果:
+----------+ | Result | |----------| | 1 | +----------+
例3–修飾オブジェクト名
OBJECT_ID()
を呼び出すとき 関数では、2つまたは3つの部分名を指定することもできます(スキーマ名とデータベース名を含めるため)。
SELECT OBJECTPROPERTY(OBJECT_ID(N'Music.dbo.Artists'), 'IsTable') AS Result;
結果:
+----------+ | Result | |----------| | 1 | +----------+
ただし、OBJECTPROPERTY()
だと思わせないでください。 そのデータベースを使用します。 (現在のデータベースと同じである場合を除いて)そうではありません。それに関する限り、それは単にオブジェクトIDを受け取っているだけです。これを忘れると、誤解を招く結果につながる可能性があります。
実例を示します。
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];
結果:
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)
この例では、2つの異なるデータベースに同じIDのオブジェクトがあります。 1つはテーブルで、もう1つはそうではありません。したがって、最初のクエリで否定的な結果が得られ、2番目のクエリで肯定的な結果が得られます。
例4–その他のプロパティ
より多くのプロパティを返す例を次に示します。
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;
結果(垂直出力を使用):
OwnerId | 1 SchemaId | 6 IsTable | 1 TableHasPrimaryKey | 1 TableHasForeignKey | 0 TableHasForeignRef | 1 TableHasIdentity | 0
これらは、OBJECTPROPERTY()
にクエリできる103個のプロパティのほんの一部です。 にとって。完全なリストについては、以下を参照してください。
例5–WHERE句内
OBJECTPROPERTY()
を使用できます WHERE
必要に応じて条項。
この例では、2つのクエリを実行します。1つは外部キーを持つテーブルを返すもので、もう1つは外部キーによって参照されるテーブルを返すものです。
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;
結果:
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)
プロパティの完全なリスト
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
- IsDeterministic
- IsEncrypted
- 実行済み
- 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
各プロパティの詳細な説明については、Microsoftのドキュメントを参照してください。