Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема с Identity_Insert
|
|||
|---|---|---|---|
|
#18+
Требуется вставить в таблицу с полем 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 есть указания на счет того, почему сие происходит и если нет , то все таки почему оно так ? Извините , ежели что, за многословие. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2002, 14:05 |
|
||
|
Проблема с Identity_Insert
|
|||
|---|---|---|---|
|
#18+
Вы знаете, Григорий, у меня ваша проблема не повторилась. Может дело в том что у меня SQL Server 2000(без SP), я не знаю какой у вас. Единственное что - я в конструкции INSERT INTO ... SELECT FROM явно указывал список полей в таблице rab(destination). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2002, 16:11 |
|
||
|
Проблема с Identity_Insert
|
|||
|---|---|---|---|
|
#18+
Sergey, большое спасибо. С явным указанием полей в destination все идет как хотелось. За последнее время это уже второй случай , когда неявное или * указание полей работает ( или точнее не работает ) не как надо. В первом случае у меня было View с указанием выбора полей в виде *. После того, как я добавил - вставил новое поле в таблицу откуда брал поля, но не пересоздал View, это View возвращало значения полей со сдвигом , то есть не видело (View), что поле вставлено. Все таки интересно, где нибудь эти , как здесь говорят, фичи описаны ? Еще раз спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2002, 16:25 |
|
||
|
Проблема с Identity_Insert
|
|||
|---|---|---|---|
|
#18+
Еще одно наблюдение : если делать 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 . Прошу прощения за беспокойство. Извините малограмотного .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2002, 17:21 |
|
||
|
Проблема с Identity_Insert
|
|||
|---|---|---|---|
|
#18+
В первом случае у меня было 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2002, 17:29 |
|
||
|
|

start [/forum/topic.php?fid=46&tid=1823770]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 330ms |

| 0 / 0 |
