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?
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'
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 .
Exécuter: décrire 'nom_table'; Dans la colonne EXTRA, c'est ce que vous cherchez
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