2012-12-07 34 views
12

Tôi đang cố gắng chạy truy vấn để kiểm tra xem một cột tự động tăng hay chưa. Tôi có thể kiểm tra loại, giá trị mặc định, nếu nó là nullable hay không, vv nhưng tôi không thể tìm ra cách để kiểm tra nếu nó tự động tăng. Đây là cách tôi đang thử nghiệm cho những thứ khác:SQL - Kiểm tra xem một cột tự động có tăng thêm

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' 

Thật không may là không có cột AUTO_INCREMENTS để so sánh. Vì vậy, làm thế nào tôi có thể kiểm tra nếu một cột tự động tăng?

+0

Bạn đang sử dụng DBMS nào? PostgreSQL? SQL Server? MySQL? –

+0

@a_horse_with_no_name - SQL Server và MySQL. – Aust

+0

'HIỂN THỊ TABLE my_table' – jchapa

Trả lời

36

Đối với MySql, Kiểm tra trong EXTRA cột:

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

Đối với Sql Server, sử dụng sys.columnsis_identity cột:

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

Giả sử MySQL, cột EXTRA sẽ cho biết đó là AUTO_INCREMENT.

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

Và đối với MSSQL, see here.

0

này làm việc cho 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

Bạn có thể mở rộng cách thức hoạt động của nó để giải quyết vấn đề của người yêu cầu không? –

+0

Tôi biết câu hỏi hơi ngày, nhưng đối với bất cứ ai tìm kiếm lịch sử và tự hỏi, tôi có thể xác nhận rằng giải pháp này LÀM VIỆC nếu bạn không muốn truy cập vào lược đồ sys. – Raiden616

3

Chạy: mô tả 'table_name'; Trong cột EXTRA là những gì bạn đang tìm kiếm

Các vấn đề liên quan