質問

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列のみを返します。私だけですか?

(注:この質問は以前のバージョンから多少変更しなければなりませんでした。)

役に立ちましたか?

解決

次のように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

他のヒント

Where句がありません。クエリは「sys.identity_columnsのすべてのsys.columnsおよび一致する行を提供します(ただし、一致する行がない場合はnullを返します)」と言っています。

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

選択     c.name、i.seed_value、i.increment_value から     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ではない

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

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を持つ通常の運用データベースで行を返します。

LEFT JOIN を使用すると、これらの行と IDENTITY

以外の行が返されます

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

追加を試してください:

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

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

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

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

select name, is_identity, is_nullable
from sys.columns
WHERE object_id = OBJECT_ID( 'ident_test' )

与えるもの

name        seed_value    increment_value
-----------------------------------------
test_id     1000          10
(1 row(s) affected)

name        is_identity   is_nullable
-------------------------------------
test_id     1           0
other       0           1

(2 row(s) affected)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top