В SQL Server можете да използвате T-SQL IDENT_CURRENT()
функция за връщане на последната стойност на идентичност, генерирана за определена таблица или изглед в колона за идентичност. Последната генерирана стойност на идентичност може да бъде за всяка сесия и всякакъв обхват.
Синтаксис
Синтаксисът е така:
IDENT_CURRENT( 'table_or_view' )
table_or_view Аргументът е името на таблицата или изгледа, чиято стойност на идентичност се връща.
Пример 1 – Основна употреба
Ето един основен пример за код.
ИЗБЕРЕТЕ IDENT_CURRENT('Домашни любимци') КАТО резултат;
Резултат:
+---------+| Резултат ||----------|| 3 |+---------+
В този случай текущата стойност на идентичността е 3.
Ето още една заявка, която проверява още таблици.
SELECT IDENT_CURRENT('Домашни любимци') КАТО домашни любимци, IDENT_CURRENT('Най-добри приятели') КАТО Най-добри приятели, IDENT_CURRENT('Градове') КАТО градове;
Резултат:
+--------+--------------+---------+| Домашни любимци | Най-добри приятели | Градове ||--------+--------------+----------|| 3 | 121 | 180 |+--------+--------------+---------+
Пример 2 – Включително схемата
Можете също да включите схемата в аргумента.
ИЗБЕРЕТЕ IDENT_CURRENT('dbo.Pets') КАТО резултат;
Резултат:
+---------+| Резултат ||----------|| 3 |+---------+
Пример 3 – След вмъкване
В този пример вмъквам още два реда в Домашни любимци таблица, след което изберете IDENT_CURRENT()
отново.
INSERT INTO Pets (PetName)VALUES ('Brian'), ('Alf');SELECT IDENT_CURRENT('dbo.Pets') КАТО резултат;
Резултат:
+---------+| Резултат ||----------|| 5 |+---------+
Ето как изглежда таблицата:
ИЗБЕРЕТЕ * ОТ домашни любимци;
Резултат:
+--------+-----------+| PetId | Име на домашни любимци ||--------+-----------|| 1 | Омир || 2 | Феликс || 3 | Руф || 4 | Брайън || 5 | Алф |+--------+-----------+
PetId колоната е колоната за идентичност. Неговата начална стойност е 1, а стойността на нарастването също е 1.
Вижте как да използвате свойството IDENTITY() в SQL Server за кода, използван за създаване на тази таблица.
Пример 4 – Проверете всички таблици в базата данни
Ето пример за проверка на всички таблици в базата данни за тяхната начална стойност на идентичността.
ИЗБЕРЕТЕ TABLE_SCHEMA, TABLE_NAME, IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) КАТО IDENT_CURRENT ОТ INFORMATION_SCHEMA.TABLES, КЪДЕТО IDENT_CURRENT(TABLE_SCHEMA + '.' + TABLE_NAME) НЕ Е NULL;Резултат:
+----------------+----------------+----------- -----+| TABLE_SCHEMA | TABLE_NAME | IDENT_CURRENT ||----------------+----------------+------------ ----|| dbo | ConstraintTest | 17 || dbo | Събитие | 1 || dbo | Табло | 8 || dbo | Домашни любимци | 5 || dbo | Най-добри приятели | 121 || dbo | Градове | 180 || dbo | Цветове | 6 || dbo | t6 | 1 || dbo | t7 | 100 |+----------------+----------------+------------ ----+Относно връщаната стойност
Връщаната стойност за
IDENT_CURRENT()
еnumeric(@@MAXPRECISION,0))
. Това означава, че това е числов тип данни с фиксирана точност и мащаб.Точността зависи от сървъра.
@@MAXPRECISION
аргумент връща нивото, използвано от десетични и числови типове данни, както е зададено в момента на сървъра. Точността определя максималния общ брой десетични цифри (включва тези от лявата и дясната страна на десетичната запетая).Вторият аргумент определя мащаб от
0
, което означава, че няма десетични цифри вдясно от десетичната запетая.Можете да изпълните следната заявка, за да намерите нивото на точност, зададено в момента на вашия сървър:
ИЗБЕРЕТЕ @@MAX_PRECISION КАТО [Максимална точност];Ето резултата в моята система:
+-----------------+| Максимална прецизност ||-----------------|| 38 |+-----------------+Създаване на колона за идентичност
Можете да създадете колона за идентичност, като използвате
IDENTITY()
свойство във вашияCREATE TABLE
илиALTER TABLE
изявление.Друг начин за създаване на колона за идентичност е
IDENTITY()
функция. Това ви позволява да създадете колона за идентичност, когато използватеSELECT INTO
изявление за прехвърляне на данни от един източник към друг.Разлики с @@IDENTITY и SCOPE_IDENTITY()
IDENT_CURRENT()
функцията е подобна на@@IDENTITY
иSCOPE_IDENTITY()
, но има някои разлики.
@@IDENTITY
иSCOPE_IDENTITY()
върне последната стойност на идентичност, генерирана в всяко таблица в текущата сесия. Разликата между тези две функции обаче е, чеSCOPE_IDENTITY
връща стойността само в рамките на текущия обхват, докато@@IDENTITY
не се ограничава до конкретен обхват.
IDENT_CURRENT()
от друга страна, не е ограничен от обхват или сесия. По-скоро е ограничен до определена таблица . Той връща стойността на идентичността, генерирана за конкретна таблица във всяка сесия и всеки обхват.Вижте IDENT_CURRENT срещу @@IDENTITY срещу SCOPE_IDENTITY в SQL Server:Каква е разликата? за прост пример, който разглежда разликите между тези три функции.