25

クエリを実行して、列が自動インクリメントされるかどうかを確認しようとしています。タイプ、デフォルト値、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、比較する列はありません。では、列が自動インクリメントされるかどうかをテストするにはどうすればよいでしょうか?

4

4 に答える 4

58

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'
于 2012-12-07T22:31:01.217 に答える
11

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

| | TABLE_CATALOG | TABLE_SCHEMA | ... | おまけ | ... |
-------------------------------------------------- -----------
| | デフ | db_2_00314 | ... | auto_increment | ... |

また、MSSQLについては、こちらを参照してください

于 2012-12-07T22:30:04.543 に答える
4

これは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
于 2013-08-31T00:49:54.977 に答える
3

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

于 2013-11-22T21:40:39.713 に答える