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

Откуда: Лондон
Сообщений: 434
Добрый день!
Как можно с помощью DDL команды убрать Identity с колонки. И как можно установить вновь?
Неужели не обойтись без временных таблиц?
18 июл 11, 09:47    [10987507]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31991
Edgar
Неужели не обойтись без временных таблиц?
Конечно, можно обойтись.

Добавить колонку - удалить колонку...
18 июл 11, 10:02    [10987599]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
Edgar
Member

Откуда: Лондон
Сообщений: 434
Более детально задача стоит так.
Есть много таблиц, в которые надо залить/мигрировать данные из другой базы.
Эти таблицы имеют identity. Но перед вставкой надо identity отключить. Потом, после вставки, вновь включить.
Это можно сделать из Management Studio. Только это долго, кликать. Хотелось бы DDL командой.

delete from dest.dbo.table1
--Здесь надо отключить identity в dest.dbo.table1
insert into est.dbo.table1(id, name)
select id, name from sourse.dbo.table1
--А сейчас надо включить identity в dest.dbo.table1
18 июл 11, 10:08    [10987621]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31991
Edgar
Более детально задача стоит так.
Есть много таблиц, в которые надо залить/мигрировать данные из другой базы.
Эти таблицы имеют identity. Но перед вставкой надо identity отключить. Потом, после вставки, вновь включить.
Это можно сделать из Management Studio. Только это долго, кликать. Хотелось бы DDL командой.

delete from dest.dbo.table1
--Здесь надо отключить identity в dest.dbo.table1
insert into est.dbo.table1(id, name)
select id, name from sourse.dbo.table1
--А сейчас надо включить identity в dest.dbo.table1
set inentity_insert on
18 июл 11, 10:09    [10987625]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
Edgar
Member

Откуда: Лондон
Сообщений: 434
Пробую:

SET IDENTITY_INSERT dest.dbo.table1 ON
insert into est.dbo.table1(id, name)
Ошибка:
Msg 8101, Level 16, State 1, Line 1
An explicit value for the identity column in table 'dest.dbo.table1' can only be specified when a column list is used and IDENTITY_INSERT is ON.
18 июл 11, 13:34    [10989123]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
А ничего, что у вас таблицы в разных базах?
18 июл 11, 13:35    [10989136]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
Edgar
Member

Откуда: Лондон
Сообщений: 434
Пробую:


SET IDENTITY_INSERT dest.dbo.table1 ON
insert into dest.dbo.table1(id, name)
select id, name from sourse.dbo.table1
Ошибка:
Msg 8101, Level 16, State 1, Line 1
An explicit value for the identity column in table 'dest.dbo.table1' can only be specified when a column list is used and IDENTITY_INSERT is ON.
18 июл 11, 13:36    [10989144]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
Edgar
Member

Откуда: Лондон
Сообщений: 434
Гавриленко Сергей Алексеевич,

Ну и что, может я вообще с Оракла читаю через linked server
18 июл 11, 13:37    [10989159]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Edgar
Гавриленко Сергей Алексеевич,

Ну и что, может я вообще с Оракла читаю через linked server
Да хоть с луны тяните. Ваш первый скрипт устанавливает иденти-инсерт в таблице в одной базе, а вставляет в таблицу в другой.
18 июл 11, 13:40    [10989185]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Edgar
Пробую:


SET IDENTITY_INSERT dest.dbo.table1 ON
insert into dest.dbo.table1(id, name)
select id, name from sourse.dbo.table1
Ошибка:
Msg 8101, Level 16, State 1, Line 1
An explicit value for the identity column in table 'dest.dbo.table1' can only be specified when a column list is used and IDENTITY_INSERT is ON.


use tempdb
go
if object_id('table1') is not null
    drop table table1
go
create table table1 (
    id      int not null    identity (1,1)
    , name  varchar (50)
)    
go
SET IDENTITY_INSERT tempdb.dbo.table1 ON
insert into tempdb.dbo.table1(id, name)
select id, name from tempdb.dbo.table1
go
----------------------------------------------
(0 row(s) affected)

Показывайте полный скрипт и структуру вашей таблицы.
18 июл 11, 13:41    [10989195]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
Edgar
Member

Откуда: Лондон
Сообщений: 434
Гавриленко Сергей Алексеевич,

Простите, в первом скрипте была опечатка. База одна и таже. dest
18 июл 11, 13:42    [10989204]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
Edgar
Member

Откуда: Лондон
Сообщений: 434
Есть предложения?
18 июл 11, 13:53    [10989284]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
step_ks
Member

Откуда:
Сообщений: 936
Edgar
Пробую:


SET IDENTITY_INSERT dest.dbo.table1 ON
insert into dest.dbo.table1(id, name)
select id, name from sourse.dbo.table1
Ошибка:
Msg 8101, Level 16, State 1, Line 1
An explicit value for the identity column in table 'dest.dbo.table1' can only be specified when a column list is used and IDENTITY_INSERT is ON.


1. показывайте реально выполняемый вами скрипт, ибо если бы вы получили указанную ошибку от приведенного скрипта, то в тексте сообщения было бы Line 2, а не Line 1.
2. триггер на вставку есть?
18 июл 11, 13:53    [10989287]     Ответить | Цитировать Сообщить модератору
 Re: DDL Identiry  [new]
Edgar
Member

Откуда: Лондон
Сообщений: 434
Спасибо большое. Все заработало!
18 июл 11, 14:13    [10989408]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить