Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как отключить identity?  [new]
Alexandr Golovko
Member

Откуда: Kiev
Сообщений: 223
Есть таблица с включенным полем identity.
Задача такая: Нужно все(!) содержимое этой таблицы скопировать в другую таблицу, а через некоторое время из второй таблицы скопировать информацию в первую, при этом нумерация должна совпадать т.е. нужно полностью восстановить информацию первой таблицы. Так вот, вопрос: Как до копирования отключить identity, а потом опять включить?
18 июл 03, 15:59    [267622]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
ale-805
Member

Откуда: Питер
Сообщений: 670
отключение:
set IDENTITY_INSERT tblName on
включение:
set IDENTITY_INSERT tblName off
18 июл 03, 16:01    [267627]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
Alexandr Golovko
Member

Откуда: Kiev
Сообщений: 223
set IDENTITY_INSERT t_tblName on - не работет!
18 июл 03, 16:08    [267644]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
Белов Владимир
Member

Откуда: Москва
Сообщений: 1718
SET IDENITITY_INSERT ON
подразумевает, то что следующий идентификатор (пердположим) вы будете сами явно указывать.
И какая ошибка при этом выдается, что Вы говорите что не работает.
18 июл 03, 16:17    [267665]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
Alexandr Golovko
Member

Откуда: Kiev
Сообщений: 223
Есть таблица с полем Identity "T_postav"
производим такие действия:
1. select * into t_postav1 from postav
2. delete t_postav
3.
set IDENTITY_INSERT t_postav on
insert into bc.dbo.t_postav select * from t_postav1
set IDENTITY_INSERT t_postav off

Выдает ошибку:
An explicit value for the identity column in table 't_postav' can only be specified when a column list is used and IDENTITY_INSERT is ON.
18 июл 03, 16:25    [267683]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
ale-805
Member

Откуда: Питер
Сообщений: 670
попробуйте явно указать таблицу:

set IDENTITY_INSERT bc.dbo.t_postav on
insert into bc.dbo.t_postav select * from t_postav1
set IDENTITY_INSERT bc.dbo.t_postav off
18 июл 03, 16:33    [267702]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
Alexandr Golovko
Member

Откуда: Kiev
Сообщений: 223
пробывал - не помогает :(
18 июл 03, 16:35    [267706]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
Гнездин Петр
Member

Откуда: Москва
Сообщений: 359
Ну так вам же человеческим (английским) языком было сказано, что помимо включения identity_insert надо еще задавать список полей
18 июл 03, 17:36    [267824]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
да неужели? :)

ошибка какая?
18 июл 03, 21:38    [268086]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вот такая

Выдает ошибку:
An explicit value for the identity column in table 't_postav' can only be specified when a column list is used and IDENTITY_INSERT is ON.
18 июл 03, 21:46    [268100]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
BrokenPot
Member

Откуда: Киев
Сообщений: 1405
set IDENTITY_INSERT bc.dbo.t_postav on
insert into bc.dbo.t_postav select * from t_postav1
set IDENTITY_INSERT bc.dbo.t_postav off

А разве не наоборот - сначала off, а потом - on?
19 июл 03, 04:33    [268245]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
AAron
Member

Откуда: Москва
Сообщений: 4324
сначала ON, затем OFF :)
Цитата из BOL

Syntax
SET IDENTITY_INSERT [ database. [ owner. ] ] { table } { ON | OFF }

Remarks
At any time, only one table in a session can have the IDENTITY_INSERT property set to ON. If a table already has this property set to ON, and a SET IDENTITY_INSERT ON statement is issued for another table, Microsoft® SQL Server™ returns an error message that states SET IDENTITY_INSERT is already ON and reports the table it is set ON for.

If the value inserted is larger than the current identity value for the table, SQL Server automatically uses the new inserted value as the current identity value.

The setting of SET IDENTITY_INSERT is set at execute or run time and not at parse time.

Так что не надо указывать столбцы identity (тем более что таких может быть не более одного в таблице:))
19 июл 03, 10:18    [268272]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Так что не надо указывать столбцы identity (тем более что таких может быть не более одного в таблице:))

И где в привиденной цитате сказано что в этом случае при команде INSERT не нужно перечислять поля ? Я лично не вижу

А сообщение об ошибке
"An explicit value for the identity column in table 't_postav' can only be specified when a column list is used and IDENTITY_INSERT is ON."
недвусмысленно говорит
"Явное значение для identity поля таблицы 't_postav' можно задать только если перечислены поля и IDENTITY_INSERT установлено в ON"
19 июл 03, 12:46    [268333]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как отключить identity?  [new]
anivaler
Member

Откуда:
Сообщений: 56
Glory,

а если у меня выскакивает ошибка во время апдейта:

Cannot update identity column 'ContactTechGroupAssocID'.

Вот это не помогает:
SET IDENTITY_INSERT tblContactTechGroupAssoc ON;

WITH ids (r_num, contactTechGroupAssocID)
AS
(
SELECT
ContactID AS r_num,
CAST(ROUND(((((CHECKSUM(NEWID()) + 2147483648)/(2147483648 + 2147483647))*(@maxRowNumContactTechGroupAssocID-1))+1),0) as int) contactTechGroupAssocID
FROM tblContactTechGroupAssoc
)

UPDATE tblContactTechGroupAssoc SET
	ContactTechGroupAssocID=(SELECT TOP 1 tt.ContactTechGroupAssocID FROM ids left join #temp_contactTechGroupAssoc tt ON tt.RowNum=ids.contactTechGroupAssocID WHERE ids.r_num=tblContactTechGroupAssoc.ContactID);

Выдает ту же ошибку
20 окт 10, 19:10    [9643998]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
Crimean
Member

Откуда:
Сообщений: 13147
триггер на таблице?
20 окт 10, 19:13    [9644008]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
anivaler
Member

Откуда:
Сообщений: 56
Crimean,

Не знаю. Как это узнать?
20 окт 10, 19:19    [9644043]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
iljy
Member

Откуда:
Сообщений: 8711
anivaler,

BOL

SET IDENTITY_INSERT (Transact-SQL)
Позволяет вставлять явные значения в столбец идентификаторов таблицы.

здесь нет ни словечка про их изменение.
20 окт 10, 19:23    [9644063]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Команды IDENTITY_UPDATE еще не сделали.
20 окт 10, 19:24    [9644075]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
anivaler
Member

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

Значит можно сделать только таким образом?
Перед апдейтом:

1. Добавить новый столбец.
2. Проапдейтить его значениями из столбца со свойством identity.
3. Грохнуть столбец со свойством identity.
4. Переименовать новый столбец в старый.
20 окт 10, 19:28    [9644091]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
Гавриленко Сергей Алексеевич
Member

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

Значит можно сделать только таким образом?
Это смотря что вы хотите в итоге получить.
20 окт 10, 20:18    [9644338]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
anivaler
Member

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

Я хочу просто сделать апдейт этой таблицы
21 окт 10, 10:17    [9646562]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
iljy
Member

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

Я хочу просто сделать апдейт этой таблицы

Во-первых - зачем изменять значение идентификатора?
Во-вторых - если уж непременно офигеть как хочется, а задача разовая, - удалите строку со старым значением и вставьте с новым.
В-третьих, если планируется делать это постоянно - тогда нафига на поле идентити? Снимите его (да, тут придется делать через копирование значений в новый столбец и удаление старого) и делайте что хотите.
21 окт 10, 10:29    [9646694]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
vit_forum
Member

Откуда:
Сообщений: 1
anivaler,

делай так

SET IDENTITY_INSERT News1 ON
INSERT INTO News1([ID],[Name],[Posted],[CustomHtml],[CampaignID])
SELECT [ID]
,[Name]
,[Posted]
,[CustomHtml]
,[CampaignID]
FROM [News]
SET IDENTITY_INSERT News1 OFF
15 дек 10, 13:10    [9941295]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Как отключить identity?  [new]
GloryV
Member

Откуда:
Сообщений: 33
Когда то, давным давно у меня получилось вот так..

DECLARE @lastKey_TEPLOSETI int
SELECT @lastKey_TEPLOSETI = MAX(KeyField) 
FROM ArhTrend

INSERT ArhTrend 
SELECT 		*
FROM ASKUTE.Trendlog.dbo.ArhTrend
WHERE KeyField > @lastKey_TEPLOSETI


P/S Снапшоты не получались
4 июл 12, 12:07    [12815007]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить identity?  [new]
GloryV
Member

Откуда:
Сообщений: 33
Action

To insert a specific identity row in a table containing an identity column successfully you must provide a column list and SET IDENTITY_INSERT to ON. The following example inserts identity row 2, where iID is defined as the identity column.

Table: tblTest 
iID         strData
1           King
3           Suyama

-- Enable IDENTITY_INSERT.
SET IDENTITY_INSERT tblTest ON
GO
-- Insert the specified identity row using a column list.
INSERT INTO tblTest (iID, strData) values (2, 'Davolio')
GO
-- Disable IDENTITY_INSERT.
SET IDENTITY_INSERT tblTest OFF
GO
6 июл 12, 10:42    [12826981]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить