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

Откуда:
Сообщений: 109
Перед массовыми изменениями в таблице хочу на всякий случай создать ее резервную копию.
Пытаюсь сделать это так:
select * into mytable_bak from mytable

На что сервер отвечает:

Сообщение 539, уровень 16, состояние 78, строка 1
Schema changed after the target table was created. Rerun the Select Into query.

При этом создается новая таблица со структурой старой, но записей в ней нет.
Чего не хватает, чтобы эта операция проходила сразу?

база в режиме совместимости с 2000, если это важно.

Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86) Jul 9 2008 14:43:34 Copyright (c) 1988-2008 Microsoft Corporation Enterprise Edition on Windows NT 5.2 <X86> (Build 3790: Service Pack 2)

---
Мой скилл в SQL = количеству сообщений на этом форуме
30 дек 09, 13:02    [8137112]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать таблицу в новую  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Попробуйте явно указать владельца (схему) как у целевой, так и у исходной таблицы.
30 дек 09, 13:24    [8137247]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать таблицу в новую  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Да и СП1 на сиквеле не помешал бы.
30 дек 09, 13:24    [8137248]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать таблицу в новую  [new]
ybill
Member

Откуда:
Сообщений: 109
Ну накатить SP не в моей власти, база в режиме 24/7, тут все по плану.
А указание схемы не помогло - все точно так же.
---
Мой скилл в SQL = количеству сообщений на этом форуме
30 дек 09, 13:42    [8137343]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать таблицу в новую  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

а какого-нибудь хитрого ddl-триггера не висит у вас?

Posted via ActualForum NNTP Server 1.4

30 дек 09, 13:49    [8137392]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать таблицу в новую  [new]
ybill
Member

Откуда:
Сообщений: 109
Что такое хитрый триггер?

Есть триггер БД, который при создании таблицы запускает

ALTER TABLE TableName REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE,MAXDOP =0)

Думаете из-за этого?

---
Мой скилл в SQL = количеству сообщений на этом форуме
30 дек 09, 14:15    [8137589]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать таблицу в новую  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> Есть триггер БД, который при создании таблицы запускает
>
> ALTER TABLE TableName REBUILD PARTITION = ALL WITH (DATA_COMPRESSION =
> PAGE,MAXDOP =0)
>
> Думаете из-за этого?

угу.

Posted via ActualForum NNTP Server 1.4

30 дек 09, 14:25    [8137648]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Скопировать таблицу в новую  [new]
mqn
Member

Откуда: Краснодар
Сообщений: 76
дак, а какое решение у данной проблемы?
30 май 16, 15:30    [19236626]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать таблицу в новую  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
mqn
дак, а какое решение у данной проблемы?
1. Не изменять таблицу в DDL-триггере.
2. Не изменять таблицу непосредственно в DDL-триггере, а делать это асинхронно через Service Broker.
3. Отказаться от select into, заменив на create table + insert ... select.
30 май 16, 15:43    [19236713]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать таблицу в новую  [new]
mqn
Member

Откуда: Краснодар
Сообщений: 76
invm,

т.е. проблема в том, что запрос пытается вставить данные ссылаясь на старую схему?
30 май 16, 15:48    [19236745]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать таблицу в новую  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
mqn,

Да. В сообщение об ошибке об этом и говорится.
30 май 16, 15:51    [19236771]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать таблицу в новую  [new]
mqn
Member

Откуда: Краснодар
Сообщений: 76
invm,

а нет возможности, как-нибудь способом, обновить схему в на уровне триггера, после изменения таблицы?
30 май 16, 15:54    [19236788]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать таблицу в новую  [new]
invm
Member

Откуда: Москва
Сообщений: 9397
mqn
а нет возможности, как-нибудь способом, обновить схему в на уровне триггера, после изменения таблицы?
Где? В инструкции select into?
Нет, нельзя.

Добавлю четвертый пункт:
4. Делать select into во временную таблицу или в таблицу в другой БД.
30 май 16, 16:02    [19236847]     Ответить | Цитировать Сообщить модератору
 Re: Скопировать таблицу в новую  [new]
mqn
Member

Откуда: Краснодар
Сообщений: 76
invm,

Спасибо за ответ.
Не знал, что alter table модифицирует схему.
30 май 16, 16:15    [19236937]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить