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

SQL ServerのOBJECTPROPERTY()とOBJECTPROPERTYEX():違いは何ですか?

    SQL Serverでは、OBJECTPROPERTY()に遭遇した可能性があります 関数、OBJECTPROPERTYEX()もあることを確認するためだけに まったく同じことをしているように見える関数。

    何が起きてる?同じことを行う2つの関数が必要なのはなぜですか?

    私の理解では、MicrosoftはOBJECTPROPERTYEX()を追加することを選択しました OBJECTPROPERTY()の機能を拡張する 、OBJECTPROPERTY()に変更を導入するのではなく これにより、レガシーシステム上の既存のコードが破損する可能性があります。

    したがって、いくつかがあります 2つの機能の違い。

    何が違うの?

    一言で言えば、OBJECTPROPERTYEX() 6つの追加プロパティをサポートし、その戻りタイプは異なります。

    内訳は次のとおりです。

    OBJECTPROPERTY() OBJECTPROPERTYEX()
    リターンタイプ int sql_variant
    サポートされているプロパティの数 103 109
    追加のプロパティ
    • BaseType
    • IsPrecise
    • SystemDataAccess
    • TableFullTextSemanticExtraction
    • UserDataAccess
    • カーディナリティ
    サポートされているプロパティ
    • 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
    • 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
    • HasAfterTrigger
    • HasDeleteTrigger
    • HasInsertTrigger
    • HasInsteadOfTrigger
    • HasUpdateTrigger
    • IsAnsiNullsOn
    • IsCheckCnst
    • IsConstraint
    • IsDefault
    • IsDefaultCnst
    • IsDeterministic
    • IsEncrypted
    • 実行済み
    • IsExtendedProc
    • IsForeignKey
    • IsIndexed
    • IsIndexable
    • IsInlineFunction
    • IsMSShipped
    • IsPrecise
    • IsPrimaryKey
    • IsProcedure
    • IsQuotedIdentOn
    • IsQueue
    • IsReplProc
    • IsRule
    • IsScalarFunction
    • IsSchemaBound
    • IsSystemTable
    • IsSystemVerified
    • IsTable
    • IsTableFunction
    • IsTrigger
    • IsUniqueCnst
    • IsUserTable
    • IsView
    • OwnerId
    • SchemaId
    • SystemDataAccess
    • 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
    • UserDataAccess
    • TableHasColumnSet
    • カーディナリティ
    • TableTemporalType

    追加プロパティの例

    これらの追加のプロパティが使用されていることを示す例を次に示します。

    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, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction,
      OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess,
      OBJECTPROPERTYEX(@objectId, 'Cardinality') AS Cardinality;
    

    結果(垂直出力を使用):

    BaseType                        | IF
    IsPrecise                       | 0
    SystemDataAccess                | 1
    TableFullTextSemanticExtraction | 0
    UserDataAccess                  | 1
    Cardinality                     | NULL
    

    この場合、オブジェクトはテーブル値関数であり、6つのプロパティのうち5つのデータを返します。

    次に、代わりにテーブルの名前を渡して、カーディナリティの値を取得できるかどうかを確認しましょう。

    USE WideWorldImportersDW;
    DECLARE @objectId int = OBJECT_ID(N'Dimension.City');
    SELECT 
      OBJECTPROPERTYEX(@objectId, 'BaseType') AS BaseType,
      OBJECTPROPERTYEX(@objectId, 'IsPrecise') AS IsPrecise,
      OBJECTPROPERTYEX(@objectId, 'SystemDataAccess') AS SystemDataAccess,
      OBJECTPROPERTYEX(@objectId, 'TableFullTextSemanticExtraction') AS TableFullTextSemanticExtraction,
      OBJECTPROPERTYEX(@objectId, 'UserDataAccess') AS UserDataAccess,
      OBJECTPROPERTYEX(@objectId, 'Cardinality') AS Cardinality;
    

    結果(垂直出力を使用):

    BaseType                        | U 
    IsPrecise                       | NULL
    SystemDataAccess                | NULL
    TableFullTextSemanticExtraction | 0
    UserDataAccess                  | NULL
    Cardinality                     | 116295
    

    今回は、3つのプロパティでNULLを取得しますが、Cardinalityプロパティの値を取得します。


    1. 空のテーブルのMAX()をNULLではなく0として扱う方法

    2. パブリックネットワーク上でサイバー攻撃からMySQLとMariaDBデータベースを保護する方法

    3. MySQLで過去12か月のデータを取得する方法

    4. 主要なワイルドカード全文検索をSQLServerで機能させるにはどうすればよいですか?