Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 какая-то лажа с IDENTITY  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Есть таблица и в ней есть строки

CREATE TABLE [Logging].[RecordSetsLog](
	[RecordSetsLog_ID] [int] NOT NULL, -- здесь была IDENTITY 
	[ReportSnapshotID] [int] NOT NULL,
	[DateTaken] [datetime] NULL,
	[N_Rows] [int] NOT NULL,
	[N_Row_Headers] [int] NOT NULL,
	[N_Columns] [int] NOT NULL,
	[N_Column_Headers] [int] NOT NULL,
 CONSTRAINT [PK_RecordSetsLog] PRIMARY KEY CLUSTERED 
(
	[RecordSetsLog_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO


Когда-то тут на колонке [RecordSetsLog_ID] была IDENTITY(1,1) , но по неизвестным мне причинам её там сейчас нет. Надо её вернуть.

Написал скрипт, чтобы пересоздать таблицу и сохранить строки. В скриптах и далее обращайте внимание, где Logging.RecordSetsLog, а где Logging.RecordSetsLog1

CREATE TABLE [Logging].[RecordSetsLog1](
	[RecordSetsLog_ID] [int] IDENTITY (1,1) NOT NULL,
	[ReportSnapshotID] [int] NOT NULL,
	[DateTaken] [datetime] NULL,
	[N_Rows] [int] NOT NULL,
	[N_Row_Headers] [int] NOT NULL,
	[N_Columns] [int] NOT NULL,
	[N_Column_Headers] [int] NOT NULL,
 CONSTRAINT [PK_RecordSetsLog1] PRIMARY KEY CLUSTERED 
(
	[RecordSetsLog_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

SET IDENTITY_INSERT [Logging].[RecordSetsLog1] ON; 
INSERT INTO [Logging].[RecordSetsLog1]
           ([RecordSetsLog_ID]
           ,[ReportSnapshotID]
           ,[DateTaken]
           ,[N_Rows]
           ,[N_Row_Headers]
           ,[N_Columns]
           ,[N_Column_Headers])
SELECT [RecordSetsLog_ID]
      ,[ReportSnapshotID]
      ,[DateTaken]
      ,[N_Rows]
      ,[N_Row_Headers]
      ,[N_Columns]
      ,[N_Column_Headers]
  FROM [OLAP].[Logging].[RecordSetsLog];

SET IDENTITY_INSERT [Logging].[RecordSetsLog1] OFF; 

EXEC sp_rename '[Logging].[RecordSetsLog]', 'RecordSetsLog_old';
EXEC sp_rename '[Logging].[RecordSetsLog1]', 'RecordSetsLog';


Но вот в чём лажа

Запускаю
SET IDENTITY_INSERT [Logging].[RecordSetsLog1] ON; 

Получаю

Msg 8107, Level 16, State 1, Line 1
IDENTITY_INSERT is already ON for table 'OLAP.Logging.RecordSetsLog'. Cannot perform SET operation for table 'Logging.RecordSetsLog1'.


Запускаю
SET IDENTITY_INSERT [Logging].[RecordSetsLog] OFF;  

Получаю
Msg 8106, Level 16, State 1, Line 1
Table 'Logging.RecordSetsLog' does not have the identity property. Cannot perform SET operation.


Кто-нибудь может что-то вразумительное сказать по этому поводу?
24 фев 15, 13:29    [17304933]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
SQL 2014 Enterprise
24 фев 15, 13:30    [17304938]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
Написал скрипт, чтобы пересоздать таблицу и сохранить строки.

Измените свойство столбца в дизайнере студии и сравните кк скрипт с вашим
24 фев 15, 13:32    [17304949]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
a_voronin
Кто-нибудь может что-то вразумительное сказать по этому поводу?
Произошло примерно такое:
use tempdb;
go

create table dbo.t1 (id int identity, v int);
create table dbo.t2 (id int identity, v int);
go

exec sp_rename 'dbo.t1.id', 'id1';
go

alter table dbo.t1 add id int;
go

set identity_insert dbo.t1 on;
go

alter table dbo.t1 drop column id1;
go

set identity_insert dbo.t2 on;
go

set identity_insert dbo.t1 off;
go

drop table dbo.t1, dbo.t2;
go
24 фев 15, 13:54    [17305082]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
invm
a_voronin
Кто-нибудь может что-то вразумительное сказать по этому поводу?
Произошло примерно такое:
use tempdb;
go

create table dbo.t1 (id int identity, v int);
create table dbo.t2 (id int identity, v int);
go

exec sp_rename 'dbo.t1.id', 'id1';
go

alter table dbo.t1 add id int;
go

set identity_insert dbo.t1 on;
go

alter table dbo.t1 drop column id1;
go

set identity_insert dbo.t2 on;
go

set identity_insert dbo.t1 off;
go

drop table dbo.t1, dbo.t2;
go
Однако, в другом батче (DSQL, например)
set identity_insert dbo.t2 on; работает и в этом случае, ЕМНИП

Следствие: колонку с IDENTITY удалил сам a_voronin в этом же батче! :))
24 фев 15, 14:00    [17305114]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Glory
a_voronin
Написал скрипт, чтобы пересоздать таблицу и сохранить строки.

Измените свойство столбца в дизайнере студии и сравните кк скрипт с вашим


Изменить свойство IDENTITY в дизайнере не дает. --> Сохранение изменений запрещено
24 фев 15, 14:03    [17305128]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
a_voronin
Glory
пропущено...

Измените свойство столбца в дизайнере студии и сравните кк скрипт с вашим


Изменить свойство IDENTITY в дизайнере не дает. --> Сохранение изменений запрещено
Во-первых, можно же снять запрет.
Во-вторых, сгенерированный скрипт-то, наверно, доступен?
24 фев 15, 14:05    [17305134]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
iap
invm
пропущено...
Произошло примерно такое:
use tempdb;
go

create table dbo.t1 (id int identity, v int);
create table dbo.t2 (id int identity, v int);
go

exec sp_rename 'dbo.t1.id', 'id1';
go

alter table dbo.t1 add id int;
go

set identity_insert dbo.t1 on;
go

alter table dbo.t1 drop column id1;
go

set identity_insert dbo.t2 on;
go

set identity_insert dbo.t1 off;
go

drop table dbo.t1, dbo.t2;
go
Однако, в другом батче (DSQL, например)
set identity_insert dbo.t2 on; работает и в этом случае, ЕМНИП

Следствие: колонку с IDENTITY удалил сам a_voronin в этом же батче! :))


Исходя из того факта, что скрипт работавший с этой таблицей перестал работать в ноябре, то пропала она три месяца назад.
24 фев 15, 14:05    [17305138]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
iap
Во-первых, можно же снять запрет.


Это как ?

iap
Во-вторых, сгенерированный скрипт-то, наверно, доступен?


В файл никакого скрипта не сохраняется. Но это будет скрипт, похожий на тот, что я написал.
24 фев 15, 14:08    [17305154]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
o-o
Guest
iap
Следствие: колонку с IDENTITY удалил сам a_voronin в этом же батче! :))

точно!
а выставил он его, чтобы перелить из identity в не-identity,
потому что сам уже не помнил, что же хочет получить в конце.
последствия вчерашнего празднования налицо
24 фев 15, 14:08    [17305156]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
invm
Member

Откуда: Москва
Сообщений: 9413
iap
Однако, в другом батче (DSQL, например)
set identity_insert dbo.t2 on; работает и в этом случае, ЕМНИП
Не в батче, а в сессии.
У a_voronin долгоиграющая сессия. Вчера установил indentity_insert и убил identity-столбец. А сегодня в ней же решил вернуть как было.
24 фев 15, 14:11    [17305167]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
o-o
Guest
a_voronin
iap
Во-первых, можно же снять запрет.


Это как ?


из соседней сессии выполнить.

At any time, only one table in a session can have the IDENTITY_INSERT property set to ON
24 фев 15, 14:11    [17305168]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
Пришлось поступить вот так
CREATE TABLE [Logging].[RecordSetsLog_temp](
	[RecordSetsLog_ID] [int] NOT NULL,
	[ReportSnapshotID] [int] NOT NULL,
	[DateTaken] [datetime] NULL,
	[N_Rows] [int] NOT NULL,
	[N_Row_Headers] [int] NOT NULL,
	[N_Columns] [int] NOT NULL,
	[N_Column_Headers] [int] NOT NULL,
 CONSTRAINT [PK_RecordSetsLog2] PRIMARY KEY CLUSTERED 
(
	[RecordSetsLog_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

INSERT INTO [Logging].[RecordSetsLog_temp]
           ([RecordSetsLog_ID]
           ,[ReportSnapshotID]
           ,[DateTaken]
           ,[N_Rows]
           ,[N_Row_Headers]
           ,[N_Columns]
           ,[N_Column_Headers])
SELECT [RecordSetsLog_ID]
      ,[ReportSnapshotID]
      ,[DateTaken]
      ,[N_Rows]
      ,[N_Row_Headers]
      ,[N_Columns]
      ,[N_Column_Headers]
  FROM [OLAP].[Logging].[RecordSetsLog];

GO


DROP TABLE [Logging].[RecordSetsLog]
GO 

CREATE TABLE [Logging].[RecordSetsLog](
	[RecordSetsLog_ID] [int] IDENTITY (1,1) NOT NULL,
	[ReportSnapshotID] [int] NOT NULL,
	[DateTaken] [datetime] NULL,
	[N_Rows] [int] NOT NULL,
	[N_Row_Headers] [int] NOT NULL,
	[N_Columns] [int] NOT NULL,
	[N_Column_Headers] [int] NOT NULL,
 CONSTRAINT [PK_RecordSetsLog] PRIMARY KEY CLUSTERED 
(
	[RecordSetsLog_ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO


SET IDENTITY_INSERT [Logging].[RecordSetsLog] ON; 
INSERT INTO [Logging].[RecordSetsLog]
           ([RecordSetsLog_ID]
           ,[ReportSnapshotID]
           ,[DateTaken]
           ,[N_Rows]
           ,[N_Row_Headers]
           ,[N_Columns]
           ,[N_Column_Headers])
SELECT [RecordSetsLog_ID]
      ,[ReportSnapshotID]
      ,[DateTaken]
      ,[N_Rows]
      ,[N_Row_Headers]
      ,[N_Columns]
      ,[N_Column_Headers]
  FROM [OLAP].[Logging].[RecordSetsLog_temp];

SET IDENTITY_INSERT [Logging].[RecordSetsLog] OFF; 
24 фев 15, 14:14    [17305185]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
Glory
Member

Откуда:
Сообщений: 104760
a_voronin
В файл никакого скрипта не сохраняется. Но это будет скрипт, похожий на тот, что я написал.

Похожий не означает идентичный
24 фев 15, 14:16    [17305196]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
invm
iap
Однако, в другом батче (DSQL, например)
set identity_insert dbo.t2 on; работает и в этом случае, ЕМНИП
Не в батче, а в сессии.
У a_voronin долгоиграющая сессия. Вчера установил indentity_insert и убил identity-столбец. А сегодня в ней же решил вернуть как было.


Да это так, но убил не вчера а сегодня, когда пытался создать вторую колонку.
24 фев 15, 14:19    [17305223]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
o-o
Guest
a_voronin
invm
пропущено...
Не в батче, а в сессии.
У a_voronin долгоиграющая сессия. Вчера установил indentity_insert и убил identity-столбец. А сегодня в ней же решил вернуть как было.


Да это так, но убил не вчера а сегодня, когда пытался создать вторую колонку.

ну так не скрипт надо было переписывать, а в соседнем окне все то, что написали, проделать.
еще раз
o-o
At any time, only one table in a session can have the IDENTITY_INSERT property set to ON

до меня только сейчас дошло, что мы еще и про разные запреты беседуем.
я про запрет иметь 2 IDENTITY_INSERT set to ON в одной сессии, достаточно было во второй выполнить.
а вы про студийный запрет.
разобрались с ним, нет? а то картинкой покажу
24 фев 15, 14:28    [17305284]     Ответить | Цитировать Сообщить модератору
 Re: какая-то лажа с IDENTITY  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4804
o-o,

разобрался
24 фев 15, 14:38    [17305368]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить