$ IDENTITY è documentato e affidabile in SQL Server?


8

Ho imparato che SQL Server può restituire il valore della (singola) colonna identità di una tabella usando la pseudo-colonna $IDENTITY:

SELECT $IDENTITY FROM Table

Questa funzione è documentata e affidabile? L'unica menzione ufficiale è sulla IDENTITYpagina ma è sepolta in un esempio di codice. Ciò suggerisce che potrebbe essere inteso come non documentato. Esistono anche poche corrispondenze di Google per questa funzione.

Risposte:


12

$IDENTITY(e $ROWGUID) sono documentati nella clausola SELECT (Transact-SQL) .

Vorrei mettere in guardia dall'utilizzarlo perché genererà un errore quando una tabella non ha una colonna di identità. Prendi questi due esempi: il primo funziona (controlla la scheda Risultati), ma il secondo genera un errore:

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

Ecco cosa produce il secondo:

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

Se stai cercando di trovare quali colonne hanno un campo identità, utilizzerei invece il metodo descritto in questo post Stack Overflow :

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

Oppure, usando le viste del catalogo:

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];
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.