sql >> データベース >  >> RDS >> Sqlserver

SQL ServerでのOBJECTPROPERTY()のしくみ

    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のドキュメントを参照してください。


    1. Oracleにシーケンスを含む複数の行を挿入する

    2. SQLServerのビューからSCHEMABINDINGを削除します

    3. MySQL/MariaDBデータベースをエクスポートします

    4. MariaDBの日時値から分を減算する方法