$ IDENTITY có được ghi lại và đáng tin cậy trong SQL Server không?


8

Tôi đã học được rằng SQL Server có thể trả về giá trị của cột nhận dạng (đơn) của một bảng bằng cột giả $IDENTITY:

SELECT $IDENTITY FROM Table

Là tính năng này được ghi nhận và đáng tin cậy? Các đề cập chính thức duy nhất của nó là trên IDENTITYtrang nhưng nó được chôn trong một mẫu mã. Điều này cho thấy rằng nó có thể được dự định là không có giấy tờ. Có rất ít trận đấu của Google cho tính năng này.

Câu trả lời:


12

$IDENTITY(và $ROWGUID) được ghi lại trong Điều khoản CHỌN (Transact-SQL) .

Tôi sẽ thận trọng khi sử dụng nó vì nó sẽ gây ra lỗi khi bảng không có cột nhận dạng. Lấy hai ví dụ này - cái đầu tiên hoạt động (kiểm tra tab Kết quả của bạn), nhưng cái thứ hai sẽ báo lỗi:

CREATE TABLE #EmployeesWithIdentity (EmployeeID INT IDENTITY(1,1), EmployeeName VARCHAR(50));
SELECT $IDENTITY FROM #EmployeesWithIdentity;
GO

CREATE TABLE #Employees (EmployeeName VARCHAR(50));
SELECT $IDENTITY FROM #Employees;
GO

Đây là thứ thứ hai tạo ra:

Msg 207, Level 16, State 1, Line 6
Invalid column name '$IDENTITY'.

Nếu bạn đang tìm kiếm cột nào có trường nhận dạng, tôi sẽ sử dụng phương pháp được mô tả trong bài viết Stack Overflow này thay thế:

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

Hoặc, sử dụng chế độ xem danh mục:

SELECT s.name,t.name,c.name
FROM sys.schemas AS s 
JOIN sys.tables AS t ON s.[schema_id] = t.[schema_id]
JOIN sys.identity_columns AS c ON t.[object_id] = c.[object_id];
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.