0

sys.* ビューを使用してメタデータを収集しています。ドキュメントによると、sys.identity_columns ビューはシード値と増分値を返します。

CREATE TABLE ident_test (
  test_id int IDENTITY(1000,10),
  other int
)

SELECT name, seed_value, increment_value
  FROM sys.identity_columns
 WHERE object_id = OBJECT_ID( 'ident_test' )

ただし、上記のクエリは 1 つの列だけを返します。私だけでしょうか?

(注:この質問を以前のバージョンから多少変更する必要がありました。)

4

4 に答える 4

1

次のように、from と join を逆にすべきではありませんか。

SELECT c.name, i.seed_value, i.increment_value
from sys.identity_columns i
join sys.columns c
    ON i.object_id = c.object_id
   AND i.column_id = c.column_id
于 2008-10-20T20:48:50.300 に答える
0

IDENTITY列を持つテーブルを持つデータベースでこれを実行していますか?

SELECT c.name, i.seed_value, i.increment_value
FROM sys.columns c
INNER JOIN sys.identity_columns i
    ON i.object_id = c.object_id
    AND i.column_id = c.column_id

少数の ID を持つ通常の本番データベースで行を返します。

a を使用すると、LEFT JOINこれらの行だけでなく、そうでない多くの行も返されますIDENTITY

NULLこれを別のデータベースで実行したところ、いくつかの s が返されることに気付きました (そのINNER JOIN場合でも)。これは、一部の列がVIEWs にあるためです。

追加してみてください:

INNER JOIN sys.tables t
ON t.object_id = c.object_id

IDENTITYテーブル内の実際の列のみにフィルターをかけます。

于 2008-10-20T20:46:44.903 に答える
0

Where 句がありません。あなたのクエリは事実上、「sys.columns のすべてと、sys.identity_columns の一致する行をすべて教えてください (ただし、一致する行がない場合は null を渡してください)」と言っています。

下に Where 句を追加すると、完全一致が返された場所のみを返すように変更されます。これは、このインスタンスの内部結合と同じです。

SELECT c.name, i.seed_value, i.increment_value FROM sys.columns c LEFT OUTER JOIN sys.identity_columns i ON i.object_id = c.object_id AND i.column_id = c.column_id I.seed_value が null でない場合

あなたのデータは正しいと思いますが、表示する結果はありません。

于 2008-10-20T20:50:56.863 に答える
0

あなたのクエリは、私が期待するものを返します[以下を参照]; テーブル (ident_test) の単一の ID 列 (test_ID) に関する単一のメタデータ行を返します。oter 列 (other) は、そのままでは ID ではないため、sys.identity_column にメタデータがありません。

名前、seed_value、increment_value を選択
  FROM sys.identity_columns
 WHERE object_id = OBJECT_ID( 'ident_test' )

名前を選択、is_identity、is_nullable
sys.columns から
WHERE object_id = OBJECT_ID( 'ident_test' )

どちらが与える

名前シード値インクリメント値
----------------------------------------------
テスト ID 1000 10
(1 行が影響を受けます)

名前 is_identity is_nullable
--------------------------------------
テスト ID 1 0
その他 0 1

(影響を受ける 2 行)
于 2008-10-20T21:40:58.290 に答える