powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с Identity_Insert
5 сообщений из 5, страница 1 из 1
Проблема с Identity_Insert
    #32023879
Gregory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Требуется вставить в таблицу с полем Identity записи из такой же таблицы с сохранением значения поля Identity из исходной таблицы. Сделать в один "заход" оператором INSERT ... Select * from ... не получается даже при установке Set Identity_insert ... On. Привожу используемый для проверки script :

/* удаляю "мусор" ежели остался */
if exists (select * from dbo.sysobjects where id = object_id(N'rab') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table rab
if exists (select * from dbo.sysobjects where id = object_id(N'srcrab') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table srcrab
/* определяю "источник" и "приемник" */
CREATE TABLE srcrab (aID int IDENTITY (1, 1) NOT NULL ,aName nvarchar (20) NULL)
CREATE TABLE rab (aID int IDENTITY (1, 1) NOT NULL ,aName nvarchar (20) NULL)
/* заполняю источник */
insert into srcrab (aName)values('Sam')

GO
set IDENTITY_INSERT rab ON
/* демонстрирую , что режим ON установлен */
insert into rab (aID,aName)values(6,'Joel')
GO
/* Вот тут и проблема */
insert into rab select aID,aName from srcrab
go
/* демонстрирую , что режим ON установлен все еще */
insert into rab (aID,aName)values(7,'Bob')
go
/* демонстрирую, что получилось в таблице-приемнике */
select * from rab
/* возвращаю все на место */
set IDENTITY_INSERT rab OFF
drop table rab
drop table srcrab

Как решить свою задачу знаю, но страшно интересно , где нибудь в BOL есть указания на счет того, почему сие происходит и если нет , то все таки почему оно так ? Извините , ежели что, за многословие.
...
Рейтинг: 0 / 0
Проблема с Identity_Insert
    #32023884
Sergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы знаете, Григорий, у меня ваша проблема не повторилась. Может дело в том что у меня SQL Server 2000(без SP), я не знаю какой у вас.
Единственное что - я в конструкции INSERT INTO ... SELECT FROM явно указывал список полей в таблице rab(destination).
...
Рейтинг: 0 / 0
Проблема с Identity_Insert
    #32023885
Gregory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey, большое спасибо. С явным указанием полей в destination все идет как хотелось.
За последнее время это уже второй случай , когда неявное или * указание полей работает ( или точнее не работает ) не как надо. В первом случае у меня было View с указанием выбора полей в виде *. После того, как я добавил - вставил новое поле в таблицу откуда брал поля, но не пересоздал View, это View возвращало значения полей со сдвигом , то есть не видело (View), что поле вставлено.
Все таки интересно, где нибудь эти , как здесь говорят, фичи описаны ? Еще раз спасибо.
...
Рейтинг: 0 / 0
Проблема с Identity_Insert
    #32023886
Gregory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще одно наблюдение :
если делать INSERT ... values(...) и не указывать в нем списка полей, то это переключает IDENTITY_INSERT в состояние OFF до выполнения вставки,
а INSERT ... select ... с неявным списком полей не делает этого переключения.

Оказывается полезно читать сообщения, в одном из сообщений почти вся ситуация четко отслеживается :
An explicit value for the identity column in table ... can only be specified when a column list is used and IDENTITY_INSERT is ON.

Правда здесь не говорится , что IDENTITY_INSERT будет или не будет принудительно переключен в состояние OFF .

Прошу прощения за беспокойство. Извините малограмотного ....
...
Рейтинг: 0 / 0
Проблема с Identity_Insert
    #32023887
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В первом случае у меня было View с указанием выбора полей в виде *

BOL - Transact-SQL Reference - CREATE VIEW
"....
Remarks
...
If a view depends on a table (or view) that was dropped, SQL Server produces an error message if anyone tries to use the view. If a new table (or view) is created, and the table structure does not change from the previous base table, to replace the one dropped, the view again becomes usable. If the new table (or view) structure changes, then the view must be dropped and recreated.
"
Можно также использовать sp_refreshview

С явным указанием полей в destination все идет как хотелось.

BOL - Accessing and Changing Relational Data - Modifying Data - Adding Data - Adding Rows with INSERT
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Проблема с Identity_Insert
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]