#sql-server-2005 #tsql
#sql-server-2005 #tsql
Вопрос:
Я пытаюсь не писать приложение для этого и одновременно улучшить свой SQL mojo…
Допустим, у меня есть данные в одной таблице базы данных Database1.dbo.MyTable
со следующими столбцами:
- ObjectType
- ObjectKeyID
Таких строк тысячи.
В Database2.dbo.MyOtherTable
У меня немного другая схема, скажем:
- MyKey
- myValue
Я хочу взять данные из Database1.dbo.MyTable
и использовать данные каждой строки в качестве ВСТАВКИ в Database2.dbo.MyOtherTable
.
Я предполагаю, что мне нужно установить курсор в цикле while, но я не уверен в точном синтаксисе для этого, или если есть лучший способ. Какой наилучший метод / синтаксис использовать для этого?
РЕДАКТИРОВАТЬ: Вот что я в итоге использовал (поля изменены для этого примера), отлично работало в дополнение к проверке наличия ключей перед вставкой:
INSERT INTO Database2.dbo.MyOtherTable (MyKey, MyValue)
SELECT ObjectType, ObjectKeyID FROM Database1.dbo.MyTable
WHERE ObjectType LIKE 'Widget' AND ObjectKeyID > 0 AND ObjectKey IN (SELECT UserAccountID FROM MyUsers)
Ответ №1:
Вы можете (и должны, если это возможно) избегать использования курсора:
INSERT INTO Database2.dbo.MyOtherTable (MyKey, MyValue)
SELECT ObjectKeyID, ObjectType FROM Database1.dbo.MyTable
Комментарии:
1. Примечание: это работает, только если обе базы данных MS SQL находятся на одном физическом сервере базы данных.
2. Что соответствует вопросу, заданному OP.
Ответ №2:
Вы можете выполнить вставку между базами данных:
insert Database2.dbo.MyOtherTable (... columns ...)
select ...
from Database1.dbo.MyTable