![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
MS SQL 2000 + MSSQL 2000 [D7, MS SQL 2000]
AndrewVolkov © (2003-01-23 18:14:00)Добрый день еще раз.
Имеется две базы на разных серверах MS SQL 2000
Задача - с одной базы сделать выборку данных и добавить в другую базу. Использую ADO. Как это правильней сделать???
Спасибо.
AndrewVolkov (2003-01-24 20:51:00) [1]Прочитал еще раз, повнимательней, усе понял.
Большое спасибо то SNIKNIK
Очень очень помогли
AndrewVolkov (2003-01-24 20:24:00) [2]Почитал я БОЛ но особо не понимаю каак я могу использовать
insert если я не могу скахзать ему from
AndrewVolkov (2003-01-24 19:24:00) [3]Спасибо
Если не сложно как правильно написать с insert
Чтобы в синтаксис врубиться
Дальше по BOL я думаю разберусь.
P.S. и с aDOCommand насколько я понял я им только могу реально посылать команды на выполнение, а реально если я хочу получить какую то выборку (в смысле просмотреть) он для этого не предназначен
sniknik (2003-01-24 15:02:00) [4]вместо select insert
еще раз, болеее настойчиво :-), почитай BOL.
AndrewVolkov (2003-01-24 14:55:00) [5]Спасибо. с этим вроде разобрался, только теперь вопрос в другом.
При такой записи
SELECT * INTO MyCategories
FROM OPENDATASOURCE(
"SQLOLEDB",
"Data Source=OutServer;User ID=sa;Password="
).Northwind.dbo.Categories
Он это сделает один раз при условии если не существует в локальной базе такой таблицы, а если уже есть он ругается
типа
There is already an object named "categories" in the database.
Получается я не могу ничего добавить ;-(
sniknik (2003-01-24 11:27:00) [6]запросы пробуй в Query Analyzer.
запрос правильный, и сообщение проверка ok, вроде. это при "run" так говорит?
запусти так (максимальное упрощение), обязательно в Query Analyzer (проше отследить, заходить туда с теми же параметрами не сможеш дело в разрешениях).
SELECT * FROM
OPENDATASOURCE ("SQLOLEDB", "Data Source=;User ID=sa;Password=").master.dbo.sysfiles
Data Source=; //не задано, возьмет текуший сервер (должен быть установлен на этой же машине)
User ID=sa;
Password= //стандартный юзер ставится при установке не должен быть запаролен, должна разрешатся идентификация по юзеру, т.е. проверь
у локального сервера (в энтерпрайс менеджере), свойства->Security->Authentication галочка должна стоять на SQL и виндовс (ни в коем случае не виндовс онли, по юзеру не зайдеш многое меняется)
master.dbo.sysfiles //есть в любом mssql сервере, раз по sa заходиш то права на открытие есть
должно работать "как есть"
AndrewVolkov (2003-01-24 10:30:00) [7]>sniknik
Чего то не выходит, не пойму почему.
Пишу запрос прямо в Ентерпрайз менеджере.
С выбрать и вставить не идет, пробую хотя бы выбрать
Пишу Select * from OpendataSource("sqloledb", "Data Source=2000Server;User id=sa;Password=").probabase.dbo.adress
Выдается сообщение (ок, хелп)
The SQL syntax has been verified against the datasource
Жмем ок
После этого в конце запроса добавляется Rowset_1
и ничего не выбирается ;-(
В чем ошибка
sniknik (2003-01-24 00:47:00) [8]> 1. Books Online она в комплекте с инсталяцией СКЛ идет?
да с MSSQL
>у меня должно быть 2 ADOConnection1? или одной хватает?
А дальше насколько я понимаю в ADOCommand1 пишется данный СКЛ
одной хватит за гзаза,
команды пишеш в ADOCommand1 его прописываеш в
ADOConnection1 его подключаеш к SQL серверу все остальное (запросы, коннекты к другому серверу он делает сам, по командам от тебя)
SELECT * INTO MyCategories
FROM OPENDATASOURCE(
"SQLOLEDB",
"Data Source=OutServer;User ID=sa;Password="
).Northwind.dbo.Categories
вот это запрос, команда на создание и заполнение таблици MyCategories в том сервере к какому подключен из внешнего источника OPENDATASOURCE...., по отнощению к нему (подк.серверу). На самом деле подключатся можеш черт знает куда а внешним будет тот сервер с которого ты команды шлеш. Вот парадокс, да?
Linked Server по моему проше его запросом сделать но можно и в Enterprise, кому как. (почитай BOL. там примеры!)
dbo это владелец, можно не писать все одно по умолчанию поставит
(пример 2 SELECT * INTO MyCategories
FROM MyLinkServer...Categories тут его нет но он все одно есть)
не знаю кто придумал, считается удобством. так не думаеш?
AndrewVolkov (2003-01-23 23:03:00) [9]P.S.
mylinkServer он понимает имя когда я его прописываю в Interprice Manager как Linked Server?
AndrewVolkov (2003-01-23 23:00:00) [10]> sniknik
Sorry, сегодня посмотрел на АДО первый раз вместе с скл, пока не все понял.
Но я еще раз спрошу
1. Books Online она в комплекте с инсталяцией СКЛ идет?
2. Я все таки недопонимаю с выбором из одной базы на одном сервере и вставкой в другую базу на другом сервере.
у меня должно быть 2 ADOConnection1? или одной хватает?
А дальше насколько я понимаю в ADOCommand1 пишется данный СКЛ
SELECT * INTO MyCategories
FROM MyLinkServer.Northwind.dbo.Categories
Тогда вопрос - у него есть св-во connection i connection string
получается я должен указать коннекцию на результирующую базу? (ведь ничего я не могу не указать), а поймет ли он тогда запись типа FROM MyLinkServer.Northwind.dbo.Categories (и зачем dbo писать?)
Если не сложно, ответьте. Я перекопал кучу факов но так ничего дельного и не нашел на мой вопрос.
sniknik (2003-01-23 22:37:00) [11]переделаем ранний пример
SELECT * INTO MyCategories
FROM OPENDATASOURCE(
"SQLOLEDB",
"Data Source=OutServer;User ID=sa;Password="
).Northwind.dbo.Categories
вот и положили в свою табличку из внешнего сервера, сервер OutServer пользователь sa пароля нет. Ужас как сложно. :о))
а теперь попроще то же самое
SELECT * INTO MyCategories
FROM MyLinkServer.Northwind.dbo.Categories
или
SELECT * INTO MyCategories
FROM MyLinkServer...Categories тоже правомочно (все параметры определены в линкед сервере)
(запись упрощается не находиш?)
DTS ну в общем та но не фигня точно, довольно мощная штука.
вместо AdoQuery1 советую для таких вещей ADOCommand использовать и настоятельно рекомендую почитать Books Online.
(про "замапить" не обращай внимания он явно спутал базы, в MSSQL нельзя обращатся по пути, да и не требуется)
AndrewVolkov (2003-01-23 20:05:00) [12]> to sniknik DTS это имется в виду встроенная фигня в MS Sql 2000?
и что значит запросы будут проще если будут linked Server?
и если можно, короткий пример sql
взять из одной базы и засунуть в другую? Я не совсем понял как написать AdoQuery1 правильно
AndrewVolkov (2003-01-23 20:00:00) [13]>to S я не совсем понял про замапить? это как?
S (2003-01-23 19:16:00) [14]Проше всего "замапить" сервер и писать запрос select * from Serbv2.Db.Имя базы. B все. За коннект будет отвечать сам сервер. Это на мой взгляд лучшее.
sniknik (2003-01-23 18:50:00) [15]да ладно, какая разница - разные -
запросами естественно
пример из Books Online
SELECT *
FROM OPENDATASOURCE(
"SQLOLEDB",
"Data Source=ServerName;User ID=MyUID;Password=MyPass"
).Northwind.dbo.Categories
для чего здесь ServerName присутствует? правильно! другой сервер указать, если можно запрос к внешней базе то положить данные в ту откуда запрс сделан, разве проблема?
кроме того можно Linked Serverсоздать, запросы попроще будут, ну или через DTSперегонять.
в общем открывай Books Online и читай разделы по ключевым словам (выделены), обрати внимание это еще не все там по ссылкам внизу, много полезного будет.
Chubais (2003-01-23 18:35:00) [16]опс...
"на разных серверах" не заметил))
AndrewVolkov (2003-01-23 18:33:00) [17]что использовать как промежуточный буфер?
или первым этапом выбирать во flat файл а потом уже экспортировать во 2 базу
или можно напрямую гнать как-то?
Chubais (2003-01-23 18:33:00) [18]insert into XXX
select ...