Apakah $ IDENTITY didokumentasikan dan dapat diandalkan di SQL Server?

8

Saya belajar bahwa SQL Server dapat mengembalikan nilai kolom identitas (tunggal) dari tabel menggunakan pseudo-kolom $IDENTITY:

SELECT $IDENTITY FROM Table

Apakah fitur ini didokumentasikan dan dapat diandalkan? Satu-satunya penyebutan resmi adalah pada IDENTITYhalaman tetapi itu terkubur dalam sampel kode. Ini menunjukkan bahwa itu mungkin dimaksudkan untuk tidak berdokumen. Ada juga sangat sedikit kecocokan Google untuk fitur ini.

boot4life
sumber

Jawaban:

12

$IDENTITY(dan $ROWGUID) didokumentasikan dalam Klausa SELECT (Transact-SQL) .

Saya akan berhati-hati agar tidak menggunakannya karena ini akan menimbulkan kesalahan ketika sebuah tabel tidak memiliki kolom identitas. Ambil dua contoh ini - yang pertama berhasil (periksa tab Hasil Anda), tetapi yang kedua melempar kesalahan:

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

Inilah yang dihasilkan yang kedua:

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

Jika Anda mencari untuk menemukan kolom mana yang memiliki bidang identitas, saya akan menggunakan metode yang dijelaskan dalam posting Stack Overflow ini sebagai gantinya:

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

Atau, menggunakan tampilan katalog:

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];
Brent Ozar
sumber