IDENTITY (функция) (Transact-SQL)
Используется только в инструкции SELECT с предложением INTO table для вставки столбца идентификаторов в новую таблицу. Хотя они похожи, функция IDENTITY не является свойством IDENTITY, которое используется с инструкциями CREATE TABLE и ALTER TABLE.
Сведения о том, как создать автоматически увеличивающееся числовое значение, которое может использоваться в нескольких таблицах или вызываться из приложений без ссылки на какие-либо таблицы, см. в разделе Порядковые номера.
Синтаксис
IDENTITY (data_type [ , seed , increment ] ) AS column_name
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
data_type
Тип данных столбца идентификаторов. Для столбца идентификаторов допустимы любые целочисленные типы данных, за исключением типов bit и decimal.
seed
Целочисленное значение, присваиваемое первой строке таблицы. Каждой последующей строке присваивается следующее значение идентификатора, равное последнему значению IDENTITY, увеличенному на значение increment. Если не указан ни аргумент seed, ни аргумент increment, то значения по умолчанию обоих равны 1.
increment
Целочисленное значение, добавляемое к значению seed для каждой последующей строки таблицы.
column_name
Имя столбца, который вставляется в новую таблицу.
Типы возвращаемых данных
Возвращает тот же тип, что и аргумент data_type.
Комментарии
Так как данная функция создает столбец в таблице, имя столбца должно быть указано в списке выбора одним из следующих способов:
--(1) SELECT IDENTITY(int, 1,1) AS ID_Num INTO NewTable FROM OldTable; --(2) SELECT ID_Num = IDENTITY(int, 1, 1) INTO NewTable FROM OldTable;
Примеры
В следующем примере все строки из Contact таблицы из базы данных AdventureWorks2022 вставляются в новую таблицу с именем NewContact . Функция IDENTITY используется, чтобы начать в таблице NewContact отсчет идентификационных номеров с 100 вместо 1.
USE AdventureWorks2022; GO IF OBJECT_ID (N'Person.NewContact', N'U') IS NOT NULL DROP TABLE Person.NewContact; GO ALTER DATABASE AdventureWorks2022 SET RECOVERY BULK_LOGGED; GO SELECT IDENTITY(smallint, 100, 1) AS ContactNum, FirstName AS First, LastName AS Last INTO Person.NewContact FROM Person.Person; GO ALTER DATABASE AdventureWorks2022 SET RECOVERY FULL; GO SELECT ContactNum, First, Last FROM Person.NewContact; GO
SQL Server Management Studio-Добавить Identity в Диаграмме
Накидал модель в диаграмме, хочу присвоить IDENTITY атрибуту таблицы, нигде не могу найти как это сделать, еще и Management Studio на русском языке поставлена.
Отслеживать
задан 12 дек 2016 в 15:08
37 5 5 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
В свойствах столбца параметр Спецификация идентификатора.
Отслеживать
ответ дан 12 дек 2016 в 15:52
11.5k 16 16 серебряных знаков 16 16 бронзовых знаков
12 дек 2016 в 15:56
На скриншоте свойства таблицы, а я говорю о свойствах столбца.
12 дек 2016 в 17:58
- sql
- sql-server
-
Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.15.1019
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
CREATE TABLE (Transact-SQL) IDENTITY (Свойство)
Создает в таблице столбец идентификаторов. Это свойство указывается в инструкциях языка Transact-SQL CREATE TABLE и ALTER TABLE.
Свойство IDENTITY отличается от свойства SQL-DMO Identity , которое предоставляет свойство удостоверения строки столбца.
Синтаксис
IDENTITY [ (seed , increment) ]
Этот синтаксис не поддерживается бессерверным пулом SQL в Azure Synapse Analytics.
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
seed
Значение, которое используется для самой первой строки, загруженной в таблицу.
increment
Добавочное значение, добавляемое к значению удостоверения предыдущей строки, загруженной.
В Azure Synapse Analytics значения для удостоверений не являются добавочными из-за распределенной архитектуры хранилища данных. Дополнительные сведения см. в статье «Использование IDENTITY» для создания суррогатных ключей в пуле SQL Synapse.
Необходимо указывать либо оба аргумента (и seed, и increment), либо не указывать ни одного из них. Если ничего не указано, применяется значение по умолчанию (1,1).
Замечания
Столбцы идентификаторов можно использовать для формирования значений ключей. Свойство identity в столбце гарантирует следующие условия:
- Каждое новое значение создается на основе текущего начального и добавочного значения.
- Каждое новое значение для определенной транзакции будет отлично от других параллельных транзакций для таблицы.
Свойство identity в столбце не гарантирует следующие условия:
-
Уникальность значения — уникальность должна быть применена с помощью PRIMARY KEY UNIQUE или ограничения или UNIQUE индекса.
Примечание. Azure Synapse Analytics не поддерживает PRIMARY KEY или ограничивает или UNIQUE UNIQUE индекс. Дополнительные сведения см. в статье «Использование IDENTITY» для создания суррогатных ключей в пуле SQL Synapse.
Эти ограничения являются частью проектирования, чтобы повысить производительность, и потому что они приемлемы во многих распространенных ситуациях. Если вы не можете использовать значения удостоверений из-за этих ограничений, создайте отдельную таблицу с текущим значением и управляйте доступом к таблице и числу назначения с помощью приложения.
Если таблица со столбцом идентификаторов опубликована для репликации, этот столбец должен обслуживаться в соответствии с типом репликации. Дополнительные сведения см. в статье Репликация столбцов идентификаторов.
Для каждой таблицы можно создать только один столбец идентификаторов.
В таблицах, оптимизированных для памяти, начальное и добавочное значение должны быть заданы 1, 1 . Задание начального или добавочного значения, отличного 1 от следующей ошибки: The use of seed and increment values other than 1 is not supported with memory optimized tables
После установки свойства удостоверения в столбце его нельзя удалить. Тип данных можно изменить, если новый тип данных совместим с свойством удостоверения.
Примеры
А. Использование свойства IDENTITY с CREATE TABLE
В следующем примере производится создание новой таблицы со свойством IDENTITY для получения автоматически увеличивающегося идентификационного номера.
USE AdventureWorks2022; GO IF OBJECT_ID('dbo.new_employees', 'U') IS NOT NULL DROP TABLE new_employees; GO CREATE TABLE new_employees ( id_num INT IDENTITY(1, 1), fname VARCHAR(20), minit CHAR(1), lname VARCHAR(30) ); INSERT new_employees (fname, minit, lname) VALUES ('Karin', 'F', 'Josephs'); INSERT new_employees (fname, minit, lname) VALUES ('Pirkko', 'O', 'Koskitalo');
B. Использование универсального синтаксиса для поиска пробелов в значениях удостоверений
Следующий пример демонстрирует базовый синтаксис для поиска разрывов в нумерации идентификаторов, возникающих при удалении данных.
Первая часть данного скрипта Transact-SQL приведена только в учебных целях. Вы можете запустить скрипт Transact-SQL, который начинается с комментария: — Create the img table .
-- Here is the generic syntax for finding identity value gaps in data. -- The illustrative example starts here. SET IDENTITY_INSERT tablename ON; DECLARE @minidentval column_type; DECLARE @maxidentval column_type; DECLARE @nextidentval column_type; SELECT @minidentval = MIN($IDENTITY), @maxidentval = MAX($IDENTITY) FROM tablename IF @minidentval = IDENT_SEED('tablename') SELECT @nextidentval = MIN($IDENTITY) + IDENT_INCR('tablename') FROM tablename t1 WHERE $IDENTITY BETWEEN IDENT_SEED('tablename') AND @maxidentval AND NOT EXISTS ( SELECT * FROM tablename t2 WHERE t2.$IDENTITY = t1.$IDENTITY + IDENT_INCR('tablename') ) ELSE SELECT @nextidentval = IDENT_SEED('tablename'); SET IDENTITY_INSERT tablename OFF; -- Here is an example to find gaps in the actual data. -- The table is called img and has two columns: the first column -- called id_num, which is an increasing identification number, and the -- second column called company_name. -- This is the end of the illustration example. -- Create the img table. -- If the img table already exists, drop it. -- Create the img table. IF OBJECT_ID('dbo.img', 'U') IS NOT NULL DROP TABLE img; GO CREATE TABLE img ( id_num INT IDENTITY(1, 1), company_name SYSNAME ); INSERT img (company_name) VALUES ('New Moon Books'); INSERT img (company_name) VALUES ('Lucerne Publishing'); -- SET IDENTITY_INSERT ON and use in img table. SET IDENTITY_INSERT img ON; DECLARE @minidentval SMALLINT; DECLARE @nextidentval SMALLINT; SELECT @minidentval = MIN($IDENTITY) FROM img IF @minidentval = IDENT_SEED('img') SELECT @nextidentval = MIN($IDENTITY) + IDENT_INCR('img') FROM img t1 WHERE $IDENTITY BETWEEN IDENT_SEED('img') AND 32766 AND NOT EXISTS ( SELECT * FROM img t2 WHERE t2.$IDENTITY = t1.$IDENTITY + IDENT_INCR('img') ) ELSE SELECT @nextidentval = IDENT_SEED('img'); SET IDENTITY_INSERT img OFF;
Связанный контент
- Инструкция ALTER TABLE (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- DBCC CHECKIDENT (Transact-SQL)
- IDENT_INCR (Transact-SQL)
- @@IDENTITY (Transact-SQL)
- IDENTITY (Function) (Transact-SQL)
- IDENT_SEED (Transact-SQL)
- SELECT (Transact-SQL)
- SET IDENTITY_INSERT (Transact-SQL)
- Репликация столбцов идентификаторов
Обратная связь
Были ли сведения на этой странице полезными?
Создание id в существующей таблице
Есть база на sql server 2008, в ней есть таблицы с записями но без id. Хотелось бы добавить id со значениями 1,2,3,4. Помогите пожалуйста написать этот запрос.
Добавлено через 17 минут
Сообщение от jfr 
Есть база на sql server 2008, в ней есть таблицы с записями но без id. Хотелось бы добавить id со значениями 1,2,3,4. Помогите пожалуйста написать этот запрос.
сначало хотелось бы отсортировать по фамилии и потом добавить id
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Создание поля в существующей таблице и заполнение его данными
Дамы и господа, такой вопрос: Есть две таблицы, к примеру, табл1 Владельцы животных — информация.
Создание нового поля в существующей таблице
Здравствуйте. Пишу на PHP класс пользовательского кабинета. За регистрацию отвечает он же.

Создание записей в таблице на основе данных уже существующей таблицы
Добрый день! Данные вводимые в базу можно условно разделить на 2 части: Основные.
Как создать ячейку в уже существующей таблице
Извеняюсь за такой глупый вопрос, но как создать ячейку в уже существующей таблице? Т.е есь таблица.
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
1 2 3 4 5 6 7 8
CREATE TABLE t_table( name_user VARCHAR(50) ); INSERT INTO t_table(name_user) VALUES('Чистяков') INSERT INTO t_table(name_user) VALUES('Тимачев') INSERT INTO t_table(name_user) VALUES('Борисюк') INSERT INTO t_table(name_user) VALUES('Васильев')
Сортируем строки в таблице:
CREATE CLUSTERED INDEX idx_table_user ON dbo.t_table_user(NameUser)
Добавляем автоинкрементный id:
ALTER TABLE t_table_user ADD id INT IDENTITY NOT NULL PRIMARY KEY
Или, если PRIMARY KEY в таблице уже есть:
ALTER TABLE t_table_user ADD id INT IDENTITY NOT NULL
1113 / 758 / 183
Регистрация: 27.11.2009
Сообщений: 2,264
Сообщение от devart dbforge 
Сортируем строки в таблице:
CREATE CLUSTERED INDEX idx_table_user ON dbo.t_table_user(NameUser)
Записи упорядочиваются только в момент запроса
и только с помощью конструкции ORDER BY
Никак иначе!
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
Сообщение от iap 
Записи упорядочиваются только в момент запроса
и только с помощью конструкции ORDER BY
Никак иначе!
1113 / 758 / 183
Регистрация: 27.11.2009
Сообщений: 2,264
Сообщение от devart dbforge 
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
Кластерный индекс физически упорядочивает строки в таблице.
Из приведенной мной ссылки:
Создает индекс, в котором логический порядок значений ключа определяет физический порядок соответствующих строк в таблице.
В приведенном мной скрипте выполните запрос
SELECT * FROM t_table
до создания кластерного индекса и после.
Сравните результаты.
1113 / 758 / 183
Регистрация: 27.11.2009
Сообщений: 2,264
Сообщение от devart dbforge 
Кластерный индекс физически упорядочивает строки в таблице.
Из приведенной мной ссылки:
В приведенном мной скрипте выполните запрос
SELECT * FROM t_table
до создания кластерного индекса и после.
Сравните результаты.
Не буду. Это всё равно ничего не доказывает.
Порядок строк в таблице логически никак не связан с порядком строк в результате запроса.
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
Сообщение от iap 
Не буду. Это всё равно ничего не доказывает.
Создает индекс, в котором логический порядок значений ключа определяет физический порядок соответствующих строк в таблице.
Creates an index in which the logical order of the key values determines the physical order of the corresponding rows in a table.
Источник один и тот же — MSDN.
1113 / 758 / 183
Регистрация: 27.11.2009
Сообщений: 2,264
Сообщение от devart dbforge 
Источник один и тот же — MSDN.
Есть разница между физическим порядком хранения в таблице
и порядком в результате запроса? А?
Всё зависит от плана выполнения запроса.
Сервер не обязан выдавать записи в том же порядке, в котором они хранятся.
И индексов может быть много.
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
Сообщение от iap 
Есть разница между физическим порядком хранения в таблице
и порядком в результате запроса?
В данном, конкретном, случае разницы не было.
Вы собираетесь и дальше утверждать, что кластерный индекс не сортирует физически данные в таблице?
176 / 168 / 27
Регистрация: 12.01.2009
Сообщений: 430
devart dbforge, все правильно написал вначале.
Это потом допустил оплошность с выборкой. Ну так она никакого отношения к вопросу jfr не имеет.
Так что заканчивает бузить iap.
168 / 142 / 1
Регистрация: 01.04.2010
Сообщений: 474
вставлю свои 5 копеек.
если таблица с более 10 млн. записей (весом более 500Мб) обработана кластерным методом, то запросы которые используют данную таблицу в разы быстрее исполняются по сравнению с тем, если бы эта табл. не была бы кластеризированна.
1113 / 758 / 183
Регистрация: 27.11.2009
Сообщений: 2,264
Сообщение от devart dbforge 
В данном, конкретном, случае разницы не было.
Если код работает в каком-то конкретном случае, но нет гарантии, что он будет работать правильно всегда,
то этот код обычно называют «говнокодом». Это неприятно и свидетельствует о недостаточной профессиональной подготовке автора кода.
Сообщение от devart dbforge 
Вы собираетесь и дальше утверждать, что кластерный индекс не сортирует физически данные в таблице?
Я и раньше этого не утверждал.
Я утверждаю, что это никак не должно интересовать с практической точки зрения автора SQL запроса.
Для документированной гарантии порядка записей в результате запроса должен быть
явно задан ORDER BY
134 / 119 / 0
Регистрация: 30.06.2010
Сообщений: 221
Сообщение от iap 
Если код работает в каком-то конкретном случае, но нет гарантии, что он будет работать правильно всегда,то этот код обычно называют «говнокодом».
Расскажите это Исааку Ньютону: ведь его механика не работает на скоростях близких к скорости света.
Сообщение от iap 
Я и раньше этого не утверждал.
Ой ли? Не Вашу ли фразу я привел ниже? И наверное не только я вижу в ней
два слова «только» и слово сочетание «Никак иначе»?
Сообщение от iap 
Записи упорядочиваются только в момент запроса
и только с помощью конструкции ORDER BY
Никак иначе!
Сообщение от iap 
Я утверждаю, что это никак не должно интересовать с практической точки зрения автора SQL запроса.
Ну так выполните приведенный мной скрипт один раз с созданием кластерного индекса, другой раз без и посмотрите результаты простого SELECT по таблице. Когда увидите четыре отличия, поймете ПОЧЕМУ ТС просил строки СНАЧАЛА отсортировать.
1113 / 758 / 183
Регистрация: 27.11.2009
Сообщений: 2,264
Ну-ну. Продолжайте в том же духе. Не смею больше Вам мешать.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Добавление индекса к уже существующей таблице с данными
Добрый )) Есть таблица с уже 300 000 строк. Индексы отсутствуют и простой select запрос.
В существующей таблице создать поле и присвоить тип
Здравствуйте! ,Совсем не знаю можно ли сделать нечто подобное при работе в AccessRunTime (для себя.

Как php прочитать файл в массив и в существующей таблице поменять NAME в соответствии с ID из
Добрый день! Задача есть csv файл следующего содержания: ID;NAME 54573;Lieskau.

Создание temp таблицы из существующей
Добрый день. Требуется создать TEMP таблицу и перелить данные из существующей. (для изменения в.
Создание таблиц в существующей базе?
Как создать таблицу в существующей базе данных во время работы прилдожения?
Создание новой таблицы из полей существующей
Собственно, вопрос полностью изложен в заголковке, как используя myadmin создать новую талицу из.
