Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] копирование данных между базами (http://forum.oszone.net/showthread.php?t=129192)

Vi-P 19-01-2009 21:47 1013130

копирование данных между базами
 
SQL 2000. Под ним, на одной машине, крутиться около 60 баз. Надо скопировать данные из одной БД в другие. Вопрос - вот такое стандартное решение приемлимо? Или как-то это более корректно надо решать?

BEGIN TRANSACTION
INSERT INTO TEST1.dbo.field1 (id, sd, wert, err, note)
SELECT id, sd, wert, err, note FROM PRIMA.dbo.field
WHERE id = 10
INSERT INTO TEST2.dbo.field1 (id, sd, wert, err, note)
SELECT id, sd, wert, err, note FROM PRIMA.dbo.field
WHERE id = 10
INSERT INTO TEST3.dbo.field1 (id, sd, wert, err, note)
SELECT id, sd, wert, err, note FROM PRIMA.dbo.field
WHERE id = 10
..........
........
....
COMMIT TRANSACTION

Busla 19-01-2009 23:10 1013235

Не пробовал в одной транзакции писать в несколько БД, но по идее это вполне корректное использование.

Vi-P 19-01-2009 23:43 1013281

Ну что же, раз возражений нет считаем такой ход нормальным :)

Delirium 20-01-2009 01:21 1013354

А я бы сделал еще Stored Procedure и выполнял ее с параметром и в планировщик. А ход вполне допустимый :)

Amin 01-02-2009 00:46 1025856

Ход совершенно правильный и корректный. В отличие от всяких DTS, вы всегда сможете свою процедуру отладить / поменять / корректно перенести на другой сервер.

Несколько моментов:
- имена объектов БД вы записали как-то странно =) У вас поля - в скобочках явно...
- пользователь dbo подразумевается "по умолчанию". Если вы ничего не мудрили с владельцами объектов, то вместо DB.dbo.table можете смело писать DB..table /* да, именно через ДВЕ точки !! */
- использовав в начале скрипта конструкцию USE DB; вы укажете текущую рабочую БД - и в этом случае в скрипте явно указывать потребуется только БД, отличную от текущей.
То есть ваше
Цитата:

BEGIN TRANSACTION
INSERT INTO TEST1.dbo.field1 (id, sd, wert, err, note) SELECT id, sd, wert, err, note FROM PRIMA.dbo.field WHERE id = 10
INSERT INTO TEST2.dbo.field1 (id, sd, wert, err, note) SELECT id, sd, wert, err, note FROM PRIMA.dbo.field WHERE id = 10
INSERT INTO TEST3.dbo.field1 (id, sd, wert, err, note) SELECT id, sd, wert, err, note FROM PRIMA.dbo.field WHERE id = 10
..........
COMMIT TRANSACTION
превратится в
Цитата:

BEGIN TRANSACTION
USE PRIMA;
INSERT INTO DB1 (id, sd, wert, err, note) SELECT id, sd, wert, err, note FROM table WHERE id = 10
INSERT INTO DB2 (id, sd, wert, err, note) SELECT id, sd, wert, err, note FROM table WHERE id = 10
INSERT INTO DB3 (id, sd, wert, err, note) SELECT id, sd, wert, err, note FROM table WHERE id = 10
..........
COMMIT TRANSACTION
Упрощайте свои скрипты ! SQL - тоже код, и обращение с ним должно быть соответствующим. (т.е. комментарии, использование переменных, выкидка откровенно лишнего кода (типа указания одной и той же БД 50 раз вместо одной команды USE), ясный синтаксис, и т.п.)

Vi-P 08-02-2009 00:37 1032480

Amin, хорошие ремарки. Учту.


Время: 04:35.

Время: 04:35.
© OSzone.net 2001-