2012-12-07 5 views
12

Ich versuche eine Abfrage auszuführen, um zu überprüfen, ob eine Spalte automatisch inkrementiert wird. Ich kann den Typ, den Standardwert, ob es nullfähig ist oder nicht, usw., aber ich kann nicht herausfinden, wie man testet, wenn es automatisch erhöht. Hier ist, wie ich für diese anderen Dinge mich entschieden:SQL - Überprüfen, ob eine Spalte automatisch inkrementiert wird

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' 

Leider gibt es keine AUTO_INCREMENTS Spalte vergleichen gegen. Wie kann ich testen, ob eine Spalte automatisch inkrementiert wird?

+0

Welche DBMS verwenden Sie? PostgreSQL? SQL Server? MySQL? –

+0

@a_horse_with_no_name - SQL Server und MySQL. – Aust

+0

'SHOW CREATE TABLE my_table' – jchapa

Antwort

36

Für MySql, Check in der EXTRA Spalte:

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%' 

für SQL Server verwenden sys.columns und die is_identity Säule:

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

Angenommen, MySQL, die EXTRA Spalte zeigt an, ob es AUTO_INCREMENT ist.

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

Und für MSSQL, see here.

0

das funktioniert für SQL Server: 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

+0

Können Sie erweitern, wie dies funktioniert, um das Problem des Anfragers zu lösen? –

+0

Ich weiß etwas veraltete Frage, aber für jeden, der historisch und fragen, kann ich bestätigen, dass diese Lösung funktioniert, wenn Sie nicht auf das Systemschema zugreifen möchten. – Raiden616

3

Ausführen: beschreiben 'Tabellenname'; In Spalte EXTRA suchen Sie nach

Verwandte Themen