web-dev-qa-db-ja.com

SQL-列が自動インクリメントするかどうかを確認する

列が自動的に増加するかどうかを確認するクエリを実行しようとしています。タイプ、デフォルト値、null可能かどうかなどを確認できますが、自動インクリメントかどうかをテストする方法がわかりません。ここに私がそれらの他のものについてテストしている方法があります:

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'my_table'
AND COLUMN_NAME = 'my_column'
AND DATA_TYPE = 'int'
AND COLUMN_DEFAULT IS NULL
AND IS_NULLABLE = 'NO'
--AND AUTO_INCREMENTS = 'YES'

残念ながらありませんAUTO_INCREMENTS比較する列。では、列が自動インクリメントするかどうかをどのようにテストできますか?

21
Aust

MySqlの場合、EXTRA列を確認します。

SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'my_table'
    AND COLUMN_NAME = 'my_column'
    AND DATA_TYPE = 'int'
    AND COLUMN_DEFAULT IS NULL
    AND IS_NULLABLE = 'NO'
    AND EXTRA like '%auto_increment%'

SQL Serverの場合は、sys.columnsおよびis_identity列を使用します。

SELECT 
    is_identity
FROM sys.columns
WHERE 
    object_id = object_id('my_table')
    AND name = 'my_column'
50

MySQLを想定すると、EXTRA列はそれがAUTO_INCREMENTかどうかを示します。

| TABLE_CATALOG | TABLE_SCHEMA | ... |追加| ... | 
 ----------------------------------------- -------------------- 
 | def | db_2_00314 | ... | auto_increment | ... |

また、MSSQLの場合は ここを参照 です。

9
Kermit

これはSQLサーバーで機能します。

    Select COLUMN_NAME, TABLE_NAME
    from INFORMATION_SCHEMA.COLUMNS
    where TABLE_SCHEMA = 'dbo'
    and COLUMNPROPERTY(object_id(TABLE_NAME), COLUMN_NAME, 'IsIdentity') = 1
    order by TABLE_NAME
4
Dalkiel

次を実行:describe 'table_name';列のEXTRAはあなたが探しているものです

3
Johny