2010-05-20 37 views
15

Tôi muốn tìm hiểu xem bảng có cột nhận dạng hay không. Bảng không được biết đến với tôi. Tôi đã không thực hiện cấu trúc của bảng. Sử dụng truy vấn?Cách xác định xem bảng có cột nhận dạng

Tôi đang sử dụng Sql Server Compact Edition.

+5

đừng quên đánh dấu câu trả lời là chấp nhận nếu bạn nhận được thông tin bạn muốn –

+0

Xem thêm [Làm thế nào để bạn xác định bảng SQL nào có cột danh tính lập trình] (http://stackoverflow.com/q/87747) –

Trả lời

14

Đây là truy vấn trả về tên cột nhận dạng;

create procedure GetIdentity 
@tablename varchar(50) 
begin 
    SELECT OBJECT_NAME(OBJECT_ID) AS TABLENAME, 
      NAME AS COLUMNNAME, 
      SEED_VALUE, 
      INCREMENT_VALUE, 
      LAST_VALUE, 
      IS_NOT_FOR_REPLICATION 
    FROM  SYS.IDENTITY_COLUMNS 
    WHERE OBJECT_NAME(OBJECT_ID) = @tablename 
end 

Sau đó, tạo thành mặt mã.

Gọi thủ tục được lưu trữ này bằng vai trò bộ dữ liệu, sau đó kiểm tra datareader.hasrows(). Nếu giá trị điều kiện là đúng (1), thì bảng có cột nhận dạng nếu được đặt. Nếu không thì nó không có cột nhận dạng.

+0

U có thể xây dựng trên truy vấn này? Cảm ơn u – Shiny

+0

kiểm tra câu trả lời lần đầu tiên –

3

Một cách để thực hiện việc này là sử dụng quy trình đã lưu sp_help. I.e:

sp_help MyTable 

Điều này sẽ trả về một Số liệu có tất cả thông tin bạn cần trên bảng. Có một Bảng cụ thể có thông tin về danh tính.

I.e:

Nếu nó không chứa trường nhận dạng, cột nhận dạng sẽ cho biết: "Không có cột nhận dạng được xác định".

+0

Tôi sẽ thêm rằng bạn có thể làm nổi bật tên của bảng và sau đó sử dụng tổ hợp phím ALT + F1 làm cắt ngắn cho điều này khi ở trong SSMS. –

2

@Pranay: anh ấy nói Compact Edition. Các thủ tục được lưu trữ không được hỗ trợ và không có sys.anything.

Đây là cuộc gọi:

SELECT Count(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE AUTOINC_INCREMENT IS NOT NULL AND TABLE_NAME='this_table'

Nó sẽ trở lại hoặc là 1 (true) hoặc 0 (false).

+0

không hoạt động đối với tôi - không có cột "AUTO_INC_INCREMENT" –

+0

Bạn có thêm một dấu gạch dưới – Patrick

6

Bất kỳ của các truy vấn dưới đây có thể được sử dụng để kiểm tra xem một cột sắc có mặt trong bảng

1)

SELECT * 
FROM sys.identity_columns 
WHERE OBJECT_NAME(object_id) = 'TableName' 

2)

SELECT * 
FROM sys.identity_columns 
WHERE object_id = (
     SELECT id 
     FROM sysobjects 
     WHERE name = 'TableName' 
    ) 
9

Tôi biết đó là thời gian dài trước đây nhưng tôi thấy điều này hữu ích

hãy thử cách này:

IF EXISTS (SELECT * from syscolumns where id = Object_ID(@TABLE_NAME) and colstat & 1 = 1) 
BEGIN 
    -- Do your things 
END 
1

này truy vấn mà có được u tất cả các tableNames, COLUMNNAMES của bảng, và is_identity hoặc không có trong cơ sở dữ liệu được lựa chọn

SELECT 
    sys.columns.name 
    , sys.tables.name 
    , is_identity 
FROM sys.columns 
INNER JOIN sys.tables ON sys.tables.object_id = sys.columns.object_id 
    AND sys.columns.is_identity = 1 
3
IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1) 

ObjectProperty có sẵn kể sql server 2008 Tham khảo: OBJECTPROPERTY

4

Tôi chỉ muốn thêm tùy chọn này cũng như tôi cho rằng đây là đơn giản nhất

SELECT COLUMNPROPERTY(OBJECT_ID('TableName'),'ColumnName','isidentity') 
+0

Tôi đồng ý với @johnmcp. Tùy chọn này thực sự đơn giản và trả về 1 khi cột là danh tính và 0 khi cột không phải là cột nhận dạng – Rajat

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