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.
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.
Đâ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.
U có thể xây dựng trên truy vấn này? Cảm ơn u – Shiny
kiểm tra câu trả lời lần đầu tiên –
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".
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. –
@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).
không hoạt động đối với tôi - không có cột "AUTO_INC_INCREMENT" –
Bạn có thêm một dấu gạch dưới – Patrick
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'
)
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
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
IF (OBJECTPROPERTY(OBJECT_ID('TABLE_NAME'), 'TableHasIdentity') = 1)
ObjectProperty
có sẵn kể sql server 2008 Tham khảo: OBJECTPROPERTY
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')
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
đừ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 –
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) –