web-dev-qa-db-fra.com

SQL - Vérifier si une colonne s'incrémente automatiquement

J'essaie d'exécuter une requête pour vérifier si une colonne s'incrémente automatiquement. Je peux vérifier le type, la valeur par défaut, s'il est nullable ou non, etc., mais je ne vois pas comment vérifier s'il incrémente automatiquement. Voici comment je teste pour ces autres choses:

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'

Malheureusement, il n'y a pas de colonne AUTO_INCREMENTS à comparer. Alors, comment puis-je tester si une colonne s'incrémente automatiquement?

16
Aust

Pour MySql, vérifiez dans la colonne 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%'

Pour Sql Server, utilisez sys.columns et la colonne is_identity:

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

En supposant que MySQL, la colonne EXTRA indique s'il s'agit de AUTO_INCREMENT.

| TABLE_CATALOGUE | TABLE_SCHEMA | ... | EXTRA | ... | 
 ----------------------------------------- -------------------- 
 | def | db_2_00314 | ... | auto_increment | ... |

Et pour MSSQL, voir ici .

8
Kermit

Exécuter: décrire 'nom_table'; Dans la colonne EXTRA, c'est ce que vous cherchez

3
Johny

cela fonctionne pour le serveur 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

1
Dalkiel