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

Откуда:
Сообщений: 4
Привет!
Пожалуйста, подскажите как удобнее всего (MS SQL Server 2008) скопировать выборочно таблицы (с данными, индексами и прочим) из одной базы в другую?


Спасибо!
19 апр 11, 11:36    [10535151]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
через Импорт/Экспорт
19 апр 11, 11:40    [10535188]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
scr120
Member

Откуда:
Сообщений: 4
Спасибо, Алексей!

Вот как раз так и пытаюсь это сделать. Но две таблицы никак не хотят перемещаться. Ошибки следующие:

Error 0xc0202049: Data Flow Task 1: Failure inserting into the read-only column "id".
(SQL Server Import and Export Wizard)

Error 0xc0202045: Data Flow Task 1: Column metadata validation failed.
(SQL Server Import and Export Wizard)

Error 0xc004706b: Data Flow Task 1: "component "Destination - IncomeStParseFields" (31)" failed validation and returned validation status "VS_ISBROKEN".
(SQL Server Import and Export Wizard)

Error 0xc004700c: Data Flow Task 1: One or more component failed validation.
(SQL Server Import and Export Wizard)

Error 0xc0024107: Data Flow Task 1: There were errors during task validation.
(SQL Server Import and Export Wizard)
19 апр 11, 11:42    [10535202]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Наверное, в них есть поля со свойством identity?
19 апр 11, 11:52    [10535310]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
scr120
Member

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

да :)

как копировать такие таблицы?
19 апр 11, 11:55    [10535343]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
Гадя Петрович
Member

Откуда: планета Плюк, 215 в тентуре, галактика Кин-дза-дза в Спирали
Сообщений: 52912
scr120
pkarklin,

да :)

как копировать такие таблицы?
set identity_insert table on
set identity_insert table off
19 апр 11, 11:57    [10535355]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
scr120,

В мастере есть соответствующий крыжик на форме Edit Mappings...
19 апр 11, 12:06    [10535437]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
scr120
Member

Откуда:
Сообщений: 4
Ребят, спасибо большое за помощь! крыжик решил проблему
19 апр 11, 12:14    [10535479]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
sql_user2
Member

Откуда:
Сообщений: 382
pkarklin
scr120,

В мастере есть соответствующий крыжик на форме Edit Mappings...





А можно как-то запросом узнать в каких таблицах есть поле identity ?

ПРосто очень неудобно когда несколько сотен таблиц, и каждой ставить "крыжик" после ошибки импорта.
21 мар 17, 16:41    [20318430]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
sql_user2
Member

Откуда:
Сообщений: 382
Ну или мож для всех сразу можно указать?

set identity_insert table on
21 мар 17, 16:42    [20318440]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
sql_user2
Member

Откуда:
Сообщений: 382
EXEC sp_MSforeachtable "SET identity_insert ? on" вызывает ошибку для таблиц, в которых нет поля identity
21 мар 17, 16:47    [20318463]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
MacaronicTragedy
Member

Откуда:
Сообщений: 99
sql_user2,
select	object_name(object_id) as Obj, 
		name as col 
from sys.columns
where is_identity = 1
21 мар 17, 16:48    [20318465]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
sql_user2
Member

Откуда:
Сообщений: 382
MacaronicTragedy
sql_user2,
select	object_name(object_id) as Obj, 
		name as col 
from sys.columns
where is_identity = 1



А, вот оно как!!!

а яищу в sys.types с name идентити


Спасибо!
21 мар 17, 16:51    [20318479]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
MacaronicTragedy
Member

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

вот так сразу скрипт можешь получить

select	N'SET IDENTITY_INSERT ' + QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(o.name) + N' ON;'
from sys.columns c 
join sys.objects o 
		on c.object_id = o.object_id
where is_identity = 1
21 мар 17, 16:54    [20318495]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8301
sql_user2
Ну или мож для всех сразу можно указать?

Справка для слабаков написна? :D
21 мар 17, 16:56    [20318503]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
sql_user2
Member

Откуда:
Сообщений: 382
пригодится мож кому
SELECT 'set identity_insert '+name+'on;' from sys.tables WHERE object_id IN
(select	object_id from sys.columns where is_identity = 1)
21 мар 17, 16:56    [20318506]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
sql_user2
Member

Откуда:
Сообщений: 382
MacaronicTragedy
sql_user2,

вот так сразу скрипт можешь получить

select	N'SET IDENTITY_INSERT ' + QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(o.name) + N' ON;'
from sys.columns c 
join sys.objects o 
		on c.object_id = o.object_id
where is_identity = 1



Да, круто!
21 мар 17, 16:57    [20318508]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
автор
а яищу в sys.types с name идентити

это комедия
21 мар 17, 16:57    [20318515]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3969
sql_user2
пригодится мож кому
SELECT 'set identity_insert '+name+'on;' from sys.tables WHERE object_id IN
(select	object_id from sys.columns where is_identity = 1)


Вряд ли с ошибкой кому-то пригодится, разве что руки занять чем-то
21 мар 17, 16:58    [20318519]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Ролг Хупин,

автор
Вряд ли с ошибкой кому-то пригодится, разве что руки занять чем-то

это скрипт для еврейских таблиц :)
21 мар 17, 17:03    [20318536]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
sql_user2
Member

Откуда:
Сообщений: 382
MacaronicTragedy
sql_user2,

вот так сразу скрипт можешь получить

select	N'SET IDENTITY_INSERT ' + QUOTENAME(SCHEMA_NAME(o.schema_id)) + N'.' + QUOTENAME(o.name) + N' ON;'
from sys.columns c 
join sys.objects o 
		on c.object_id = o.object_id
where is_identity = 1



Скрипт сформировался, но на большинстве таблиц уже включено IDENTITY_INSERT и выдает обшибку.

Может можно их как-то отфильтровать, те таблиц где уже включено?
21 мар 17, 17:04    [20318538]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
sql_user2
Member

Откуда:
Сообщений: 382
Ролг Хупин
sql_user2
пригодится мож кому
SELECT 'set identity_insert '+name+' on;' from sys.tables WHERE object_id IN
(select	object_id from sys.columns where is_identity = 1)


Вряд ли с ошибкой кому-то пригодится, разве что руки занять чем-то


вы считаете форумчан на столько тупыми что они не способны пробел поставить перед on?
21 мар 17, 17:06    [20318542]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
sql_user2,
ну судя по тому что у тебя делать можно всё что хочешь - сделай всем OFF потом ON
21 мар 17, 17:06    [20318544]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
MacaronicTragedy
Member

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

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.

https://msdn.microsoft.com/en-us/library/ms188059.aspx
21 мар 17, 17:08    [20318553]     Ответить | Цитировать Сообщить модератору
 Re: Копирование таблиц между базами данных (на одном сервере)  [new]
sql_user2
Member

Откуда:
Сообщений: 382
MacaronicTragedy
sql_user2,

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.

https://msdn.microsoft.com/en-us/library/ms188059.aspx

ого, получается все крыжить мышью
21 мар 17, 17:13    [20318570]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить