Имя: Пароль:
1C
 
SQL один запрос на базы на разных серваках. КАК?
0 Skom
 
21.07.10
09:19
есть необходиомсть сделать запрос сразу к 5-ти базам
это не проблема
но беда в том что на ОДНОМ серваке 3 базы и на другом еще 2

вот внутри одного сервера по базам я умею делать запрос
а как к нему прицепить запрос для другого сервака?
1 Skom
 
21.07.10
09:20
например вот

SELECT DISTINCT
   |    ЗАО.ДисконтнаяКарта as ДисконтнаяКарта,
   |    ЗАО.Клиент
   |FROM
   |        (
   |        Select
   |            Спр.CODE ДисконтнаяКарта,
   |            Спр.sp36797 Клиент
   |        From
   |            zao_2008..sc36801 as Спр (nolock)
   |        Where
   |            Спр.sp36797 <>'' and
   |            Спр.ID not in (
   |                            select Док.sp39185
   |                            from zao_2008..dh5292 as Док (nolock)
   |                            Inner Join zao_2008.._1SJourn as Жур (nolock) on Right(Жур.Date_Time_IDDoc,9) = Док.IDDoc
   |                            Where Док.sp39185 <> '     0   ' And Жур.Date_Time_IDDoc Between '20090101' And '20091231Z'
   |                            )
   |        ) as ЗАО


далее джойню таблицы из другой БАЗЫ ДАННЫХ
НО!!!!

надо получить данные из двух баз (но с другого серверва, сервак виден по локалке)
2 el-gamberro
 
21.07.10
09:22
sp_addlinkedserver

Либо можешь линковать сервера из SSMS
3 thargon
 
21.07.10
09:22
И в чем проблема? Это штатная возможность ms sql-я.
4 el-gamberro
 
21.07.10
09:23
(3) Возможность штатная, но сервер предварительно надо залинковать.
5 Skom
 
21.07.10
09:24
на простом примерчике можете показать как линковать и как в запросе задействовать данную связь.
просто никогда не сталкивался до этого
6 el-gamberro
 
21.07.10
09:25
(5) http://msdn.microsoft.com/ru-ru/library/ms190479.aspx

Просто в имени таблицы указываешь еще полный путь до нее, относительной той БД из которой делаеться запрос.
7 Skom
 
21.07.10
09:27
(6) спс. нашел то же самое в БОЛ
пошел пробовать))

если что еще вас подостаю малость
8 el-gamberro
 
21.07.10
09:27
ТИПА
LEFT JOIN 1csever.tradebase.dbo.payments.iddoc
9 Skom
 
21.07.10
09:31
(8) о! вот за это спасибо.
я шел в этом направлении но не дошел пока))
10 dk
 
21.07.10
09:31
SELECT   *
FROM      OPENDATASOURCE(
        'SQLOLEDB',
        'Data Source=srv-term;User ID=sa;Password=***'
        ).Northwind.dbo.Employees
11 Skom
 
21.07.10
09:32
а в запросе куда ...в самом начале линковать сервак?
в запросе в (1) куда вставить линк?
12 el-gamberro
 
21.07.10
09:33
(11) Сервер линкуется один раз, потом еще больше линковать не надо (даже если перезагружал сервер).

Хранимку можно выполнить из SSMS
13 Nic1
 
21.07.10
09:38
(11) в EM можно вручную прилинковать новый сервер, в ветке Security-Linked Servers.
14 Skom
 
21.07.10
09:38
стоп.
если в ЕМ я вижу этот сервер,
то он уже прилинкован?
15 Nic1
 
21.07.10
09:39
(14) он должен быть в списке Linked Servers
16 el-gamberro
 
21.07.10
09:39
(14) Нет
17 Skom
 
21.07.10
09:41
а провайдера какого ставить при линке?

натив клиента?
или оле ДБЦ
18 Skom
 
21.07.10
09:41
OLE ODBC
19 Nic1
 
21.07.10
09:42
(18) SQL Server
20 Nic1
 
21.07.10
09:44
можно вроде Microsoft OLE DB Provider for SQL Server, но лучше ставить Server Type - SQL Server.
21 Skom
 
21.07.10
09:44
ставлю. в списке таблиц вижу тока системные таблицы сервера
22 Nic1
 
21.07.10
09:45
(21) значит прилинкован. Теперь можно запросы пробовать
23 Nic1
 
21.07.10
09:47
(22) правда иногла еще приходится ставить одинаковые пароли на учетные записи, по которым линкуешься, если так не прокатит
24 Skom
 
21.07.10
09:50
у меня имя сервака как айпи

10.0.0.2

как мне в запросе его использовать????
25 rs_trade
 
21.07.10
09:51
(24) погугли на тему linked server
26 Nic1
 
21.07.10
09:52
(24) а х.з., можешь прямо так и пробовать, но лучше использовать имя SQL Servera, по имени тоже без проблем обычно линкуется. Т.е, попробуй прилинковаться по имени сервера
27 el-gamberro
 
21.07.10
09:53
(24) хз чего там мудрить.

всегда писал в SSMS sp_addlinkedserver 'имясервера'
все остальное по умолчани.
28 Skom
 
21.07.10
09:53
(26) уже перелинковал вроде по скульному имени
29 Skom
 
21.07.10
09:54
+28 ха ха
серваки в разных доменах
что то не дает подключиться.
точнее подключается а к таблицам доступа не видит
хотя логин к серваку указал сам (правильный)
30 Skom
 
21.07.10
09:56
ну оно и верно в подсетках то разных.
по айпи он видит сервак а по ДНС имени не видит
31 Nic1
 
21.07.10
09:58
(29)

какую ошибку выдает запрос?

P.S. я как-то ликновался с локальной машины (которая не была в домене) на сервак в домене по имени, там все нормально было. Только пароли на учетки одинаковые должны быть
32 Nic1
 
21.07.10
09:59
а системные таблицы то видны?
33 Skom
 
21.07.10
10:06
пока писал мессаг - уже разобрался
всем спасибо.
возникнут вопросы - добавлю сюда
34 Skom
 
21.07.10
10:38
select Док.sp39237
       from [10.0.0.2].OOO_S.dbo.dh5292 as Док (nolock)
       Inner Join [10.0.0.2].OOO_S.dbo._1SJourn as Жур (nolock) on Right(Жур.Date_Time_IDDoc,9) = Док.IDDoc
       Where Док.sp39237 <> '     0   ' And Жур.Date_Time_IDDoc Between '20090720' And '20100719Z'
35 Skom
 
21.07.10
10:38
выдает ошибку
Cannot specify an index or locking hint for a remote data source.
36 Skom
 
21.07.10
10:39
хм. ноулоки убрал считает
37 el-gamberro
 
21.07.10
10:40
(36) Для линкованного сервера некоторые фичи недоступны.
38 Nic1
 
21.07.10
10:53
(36) nolock там и не будет работать..
39 Skom
 
21.07.10
10:54
все. спасибо
проблему решил уже.
40 UprDem
 
21.07.10
11:01
Кстати. У меня запрос к прилинкованному серверу ну намноооого дольше шёл. (Мне всего пару раз такое надо было). У коллег тоже это есть? Или это моё личное
41 Skom
 
21.07.10
11:04
дольше.

мне тоже одноразово надо

шефу надо знать
какие дисконтные карты не были задействованы за последний год
нашло 2600 карт))

а запрос и правда гораздо дольше работает
42 dk
 
21.07.10
11:11
- доктор. меня все игнорируют!
- следующий
---
см. (10) хотя если запросы часто шлешь, то лучше залинковать - можно ведь через меню это 1 раз сделать