W SQL Server możesz użyć T-SQL IDENT_CURRENT()
funkcja zwracająca ostatnią wartość tożsamości wygenerowaną dla określonej tabeli lub widoku w kolumnie tożsamości. Ostatnia wygenerowana wartość tożsamości może dotyczyć dowolnej sesji i dowolnego zakresu.
Składnia
Składnia wygląda tak:
IDENT_CURRENT( 'table_or_view' )
tabela_lub_widok argumentem jest nazwa tabeli lub widoku, którego wartość tożsamości jest zwracana.
Przykład 1 – Podstawowe użycie
Oto podstawowy przykład kodu.
SELECT IDENT_CURRENT('Pets') AS Result;
Wynik:
+----------+ | Result | |----------| | 3 | +----------+
W tym przypadku aktualna wartość tożsamości to 3.
Oto kolejne zapytanie, które sprawdza więcej tabel.
SELECT IDENT_CURRENT('Pets') AS Pets, IDENT_CURRENT('BestFriends') AS BestFriends, IDENT_CURRENT('Cities') AS Cities;
Wynik:
+--------+---------------+----------+ | Pets | BestFriends | Cities | |--------+---------------+----------| | 3 | 121 | 180 | +--------+---------------+----------+
Przykład 2 – uwzględnienie schematu
Możesz również dołączyć schemat do argumentu.
SELECT IDENT_CURRENT('dbo.Pets') AS Result;
Wynik:
+----------+ | Result | |----------| | 3 | +----------+
Przykład 3 – po wstawce
W tym przykładzie wstawiam jeszcze dwa wiersze do Zwierzęta tabeli, a następnie wybierz IDENT_CURRENT()
ponownie.
INSERT INTO Pets (PetName) VALUES ('Brian'), ('Alf'); SELECT IDENT_CURRENT('dbo.Pets') AS Result;
Wynik:
+----------+ | Result | |----------| | 5 | +----------+
Oto jak wygląda tabela:
SELECT * FROM Pets;
Wynik:
+---------+-----------+ | PetId | PetName | |---------+-----------| | 1 | Homer | | 2 | Felix | | 3 | Ruff | | 4 | Brian | | 5 | Alf | +---------+-----------+
Identyfikator zwierzaka kolumna to kolumna tożsamości. Jego wartość inicjatora wynosi 1, a wartość przyrostu również wynosi 1.
Zobacz, jak używać właściwości IDENTITY() w SQL Server, aby zapoznać się z kodem użytym do utworzenia tej tabeli.
Przykład 4 – Sprawdź wszystkie tabele w bazie danych
Oto przykład sprawdzania wszystkich tabel w bazie danych pod kątem ich wartości początkowej tożsamości.
SELECT TABLE_SCHEMA, TABLE_NAME, IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) AS IDENT_CURRENT FROM INFORMATION_SCHEMA.TABLES WHERE IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) IS NOT NULL;
Wynik:
+----------------+----------------+-----------------+ | TABLE_SCHEMA | TABLE_NAME | IDENT_CURRENT | |----------------+----------------+-----------------| | dbo | ConstraintTest | 17 | | dbo | Event | 1 | | dbo | Scoreboard | 8 | | dbo | Pets | 5 | | dbo | BestFriends | 121 | | dbo | Cities | 180 | | dbo | Colors | 6 | | dbo | t6 | 1 | | dbo | t7 | 100 | +----------------+----------------+-----------------+
O wartości zwrotu
Zwracana wartość dla IDENT_CURRENT()
to numeric(@@MAXPRECISION,0))
. Oznacza to, że jest to numeryczny typ danych o stałej precyzji i skali.
Dokładność zależy od serwera. @@MAXPRECISION
argument zwraca poziom używany przez dziesiętne i numeryczne typy danych zgodnie z bieżącym ustawieniem na serwerze. Precyzja określa maksymalną całkowitą liczbę cyfr dziesiętnych (obejmuje te po lewej i prawej stronie przecinka).
Drugi argument określa skalę 0
, co oznacza, że po prawej stronie miejsca dziesiętnego nie ma cyfr dziesiętnych.
Możesz uruchomić następujące zapytanie, aby znaleźć poziom dokładności aktualnie ustawiony na Twoim serwerze:
SELECT @@MAX_PRECISION AS [Max Precision];
Oto wynik w moim systemie:
+-----------------+ | Max Precision | |-----------------| | 38 | +-----------------+
Tworzenie kolumny tożsamości
Możesz utworzyć kolumnę tożsamości za pomocą IDENTITY()
właściwość w Twojej CREATE TABLE
lub ALTER TABLE
oświadczenie.
Innym sposobem na utworzenie kolumny tożsamości jest IDENTITY()
funkcjonować. Umożliwia to utworzenie kolumny tożsamości przy użyciu SELECT INTO
oświadczenie o przesyłaniu danych z jednego źródła do drugiego.
Różnice z @@IDENTITY i SCOPE_IDENTITY()
IDENT_CURRENT()
funkcja jest podobna do @@IDENTITY
i SCOPE_IDENTITY()
, ale są pewne różnice.
@@IDENTITY
i SCOPE_IDENTITY()
zwróć ostatnią wartość tożsamości wygenerowaną w dowolny tabeli w bieżącej sesji. Jednak różnica między tymi dwiema funkcjami polega na tym, że SCOPE_IDENTITY
zwraca wartość tylko w bieżącym zakresie, natomiast @@IDENTITY
nie jest ograniczony do określonego zakresu.
IDENT_CURRENT()
z drugiej strony nie jest ograniczony zakresem lub sesja. Raczej ogranicza się do określonej tabeli . Zwraca wartość tożsamości wygenerowaną dla określonej tabeli w dowolnej sesji i dowolnym zakresie.
Zobacz IDENT_CURRENT vs @@IDENTITY vs SCOPE_IDENTITY w programie SQL Server:jaka jest różnica? na prosty przykład, który przedstawia różnice między tymi trzema funkcjami.