2012-12-07 3 views
12

Sto tentando di eseguire una query per verificare se una colonna incrementa automaticamente. Posso controllare il tipo, il valore predefinito, se è nullable o no, ecc., Ma non riesco a capire come testare se incrementa automaticamente. Ecco come sto testando per quelle altre cose:SQL: verificare se una colonna incrementa automaticamente

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' 

purtroppo non c'è colonna AUTO_INCREMENTS da confrontare. Quindi, come posso testare se una colonna si incrementa automaticamente?

+0

Quale DBMS stai usando? PostgreSQL? Server SQL? MySQL? –

+0

@a_horse_with_no_name - SQL Server e MySQL. – Aust

+0

'SHOW CREATE TABLE my_table' – jchapa

risposta

36

per MySQL, di controllo nella colonna 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%' 

per SQL Server, utilizzare sys.columns e la colonna is_identity:

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

Supponendo che MySQL, la colonna EXTRA indicherà se è AUTO_INCREMENT.

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

E per MSSQL, see here.

0

questo funziona per 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

Puoi approfondire come funziona per risolvere il problema del richiedente? –

+0

Conosco una domanda un po 'datata, ma per chi guarda storicamente e mi chiedo, posso confermare che questa soluzione FUNZIONA se non si desidera accedere allo schema sys. – Raiden616

3

Esegui: descrivi 'nome_tabella'; Nella colonna EXTRA è quello che stai cercando