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
Не пробовал в одной транзакции писать в несколько БД, но по идее это вполне корректное использование.
Ну что же, раз возражений нет считаем такой ход нормальным :)
Delirium
20-01-2009, 01:21
А я бы сделал еще Stored Procedure и выполнял ее с параметром и в планировщик. А ход вполне допустимый :)
Ход совершенно правильный и корректный. В отличие от всяких 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), ясный синтаксис, и т.п.)
Amin, хорошие ремарки. Учту.
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.