OBJECTPROPERTY()
を使用できます SQL Serverの関数を使用して、テーブルにタイムスタンプがあるかどうかを確認します。 桁。
これを行うには、最初の引数としてテーブルのオブジェクトIDを渡し、TableHasTimestamp
2番目の引数として。この関数は1
を返します または0
タイムスタンプがあるかどうかによって異なります 列。
1
の戻り値 テーブルが行うことを意味します タイムスタンプがある 列、および0
の値 そうではないことを意味します。
これは、行バージョンとして定義されている列でも機能します (タイムスタンプ rowversionの非推奨の同義語です )。
例1-タイムスタンプ列
タイムスタンプを使用してテーブルでデモンストレーションする簡単な例を次に示します。 列。
USE Test_timestamp; SELECT OBJECTPROPERTY(OBJECT_ID('Pet'), 'TableHasTimestamp') AS [TableHasTimestamp];
結果:
+---------------------+ | TableHasTimestamp | |---------------------| | 1 | +---------------------+
この場合、 Test_timestamp データベースには、提供されたIDのテーブルがあり、タイムスタンプがあります。 列。
OBJECT_ID()
を使用します 名前に基づいてテーブルのIDを取得する関数。
例2–行バージョン列
前述のように、この方法は、行バージョンを使用した場合にも機能します。 列を定義します。
たとえば、次のようにテーブルを作成するとします。
CREATE TABLE Owner ( OwnerId int PRIMARY KEY, OwnerName varchar(255), RowVersion rowversion );
そして、それをチェックします:
SELECT OBJECTPROPERTY(OBJECT_ID('Owner'), 'TableHasTimestamp') AS [TableHasTimestamp];
結果:
+---------------------+ | TableHasTimestamp | |---------------------| | 1 | +---------------------+
Microsoftのドキュメントには、タイムスタンプと記載されていますが、私は気づきました。 rowversionの同義語です 、この記事の執筆時点では、行バージョンとして列を作成しています 私のSQLServer2017システムでは、実際にはタイムスタンプとして表示されます。 桁。列が作成された後にタイプを見ると、タイムスタンプ列として表示されます。
SELECT OBJECT_NAME(object_id) AS [Table], name AS [Column], TYPE_NAME(system_type_id) AS [Type] FROM sys.columns WHERE OBJECT_NAME(object_id) = 'Owner';
結果:
+---------+------------+-----------+ | Table | Column | Type | |---------+------------+-----------| | Owner | OwnerId | int | | Owner | OwnerName | varchar | | Owner | RowVersion | timestamp | +---------+------------+-----------+
例3–TIMESTAMP列のないテーブル
テーブルにタイムスタンプがない場合は、次のようになります。 列。
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasTimestamp') AS [TableHasTimestamp];
結果:
+---------------------+ | TableHasTimestamp | |---------------------| | 0 | +---------------------+
この場合、オブジェクトはテーブルですが、タイムスタンプはありません。 列。
例4–オブジェクトがテーブルではない場合
データベースにIDを持つオブジェクトが含まれているが、そのオブジェクトがテーブルではない場合は、次のようになります。
SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasTimestamp') AS [TableHasTimestamp];
結果:
+---------------------+ | TableHasTimestamp | |---------------------| | NULL | +---------------------+
例5–オブジェクトが存在しない
SQL Serverは、オブジェクトIDが現在のデータベースコンテキストにあると想定します。別のデータベースからオブジェクトIDを渡すと、NULLの結果が得られるか、誤った結果が得られます。
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasTimestamp') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasTimestamp') AS [12345678];
結果:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
この場合、データベースにはその名前またはIDのオブジェクトが含まれていないため、結果はNULLになります。
エラーが発生した場合、またはオブジェクトを表示する権限がない場合にもNULLが発生します。