воскресенье, 13 ноября 2011 г.

Плюшки от Denali - часть 1

Сегодня во время работы с SQL Server Denali наткнулся на одну очень приятную неожиданность, о которой я хотел бы рассказать. Предположим у нас есть самая обычная таблица с кластерным индексом и нам необходимо вставить несколько записей используя инструкцию identity_insert
, например:



  1. set identity_insert dbo.[table] on
  2. INSERT INTO [dbo].[table] ([Id],[Code],[Name]) VALUES (1,15,'name 1')
  3. INSERT INTO [dbo].[table] ([Id],[Code],[Name]) VALUES (5,112,'name 2')
  4. INSERT INTO [dbo].[table] ([Id],[Code],[Name]) VALUES (5,23,'name 3')
  5. set identity_insert dbo.[table] off
* This source code was highlighted with Source Code Highlighter.


Так как у нас есть кластерный индекс по полю Id и мы пытаемся вставить в четвертой строчке уже существующий айдишник, то SQL Server выдал бы стандартное сообщение об ошибке:


Msg 2627, Level 14, State 1, Line 2
Violation of PRIMARY KEY constraint 'PK_table'. Cannot insert duplicate key in object 'dbo.table'.
The statement has been terminated.


Но только не в Denali. Тут нас ждет немного другое сообщение об ошибке - расширенное:


Msg 2627, Level 14, State 1, Line 2
Violation of PRIMARY KEY constraint 'PK_table'. Cannot insert duplicate key in object 'dbo.table'. The duplicate key value is (5).
The statement has been terminated.

Как видно из сообщения об ошибке SQL Server Denali теперь указывает нам значение поля Id, на котором возникает ошибка при вставке. Все вышесказанное относится и к уникальным индексам. Если мы попытаемся вставить дубликат в поле, по которому построен уникальный индекс, то мы получим тоже сообщение об ошибке.

Вот такой приятный сюрприз ждет нас в SQL Server Denali.

Комментариев нет:

Отправить комментарий