Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Запрос между таблицами из разных серверов КАК?  [new]
Yra
Member

Откуда:
Сообщений: 68
Здравствуйте!
Есть ситуация: есть две машины с SQL server 2008. Находятся в сети. Одна выполняет роль рабочего места оператора станка, другая как сервер хранения данных.
Оператор обрабатывает детали и их номера номера сохраняются на сервер хранения данных. Т.е. его машина пишет данные на удаленную БД. При обрыве связи с удаленной машиной, он должен хранить данные у себя на машине, а при появлении связи передать их на удаленную машину и далее работать опять же с удаленной БД.
Для конкретики имя таблицы на машине оператора пусть будет Table поля ID int, Num int.
Имя таблицы на машине сервера хранения данных пусть будет Table_Copy поля ID int, Num int

Как реализовать такую задачу, может кто сталкивался?....

Был при экспериментах составлен запрос на обновление записей:
MERGE INTO [Table_Copy] USING [Table] ON (Table.ID = Table_Copy.ID)
   WHEN NOT MATCHED THEN
   INSERT ([ID],[Num]) VALUES ([Table].[ID],[Table].[Num]) ;

Работает! Сравниваются таблицы [Table] и [Table_Copy]. При отсутствии записей в [Table_Copy], они дополняются из [Table]....Но [Table] и [Table_Copy] они на одной машине..
А вот если [Table] и [Table_Copy] на разных машинах как быть?

Сообщение было отредактировано: 16 мар 15, 10:18
16 мар 15, 09:05    [17387600]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2732
казалось бы, при чем тут Delphi, если есть форум по MSSQL?
16 мар 15, 09:10    [17387618]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4665
Yra,

Один из вариантов
1)Результаты сохранять как текстовый файл.
2)Bulk Insert со всякими анализами и обновлениями.

второй, при наличии серверов на разных машинах goto https://www.sql.ru/forum/microsoft-sql-server
16 мар 15, 09:14    [17387637]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Yra
Member

Откуда:
Сообщений: 68
Хорошо бы эту задачу поручать SQL server.... Не ужели нет конструкции в языке SQL которая бы позволяла работать с разными машинами?
16 мар 15, 09:23    [17387675]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Gerasimenko
Member

Откуда:
Сообщений: 4665
Yra
Хорошо бы эту задачу поручать SQL server.... Не ужели нет конструкции в языке SQL которая бы позволяла работать с разными машинами?
<Имя сервера>.<Имя БД>.<Имя схемы>.<Имя таблицы>
16 мар 15, 09:28    [17387702]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Tactical Nuclear Penguin
Member

Откуда: холодно тут
Сообщений: 2732
Yra
Хорошо бы эту задачу поручать SQL server.... Не ужели нет конструкции в языке SQL которая бы позволяла работать с разными машинами?


RTFM Linked server

Модератор: Тема перенесена из форума "Delphi".


Сообщение было отредактировано: 16 мар 15, 10:19
16 мар 15, 09:31    [17387717]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Yra
Member

Откуда:
Сообщений: 68
В чем проблема, подскажите:
запрос:
SELECT *
FROM [VM-FREDDY\SQLEXPRESS].[work].[dbo].[Kontr_Users]
Работает все с порядке. Возвращает все записи из сервера по сети... [VM-FREDDY\SQLEXPRESS] это сервер в сети. Я его создал как связанный сервер.

а запрос к 1 полю [ID]:
SELECT [VM-FREDDY\SQLEXPRESS].[work].[dbo].[Kontr_Users].[ID]
FROM [VM-FREDDY\SQLEXPRESS].[work].[dbo].[Kontr_Users]
не работает Вываливает ошибку в окне создания запросов
"The multi-part identifier "VM-FREDDY\SQLEXPRESS.work.dbo.Kontr_Users.ID" could not be bound."

ПОЧЕМУ?
16 мар 15, 10:21    [17387977]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
Yra,

используйте везде алиасы таблиц.
16 мар 15, 10:26    [17387992]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
aleks2
Guest
SELECT t.[ID] 
FROM [VM-FREDDY\SQLEXPRESS].[work].[dbo].[Kontr_Users] as t
16 мар 15, 10:27    [17387998]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Yra
Member

Откуда:
Сообщений: 68
Это все шаг за шагом, чтобы подобраться к мега задаче для меня - переложить запрос

MERGE INTO [Kontr_Users] USING [Users] ON (Users.ID = Kontr_Users.ID)
WHEN NOT MATCHED THEN
INSERT ([ID],[Num]) VALUES ([Users].[ID],[Users].[Num]) ; - который работает с таблицей [Kontr_Users] находящейся на локальном сервере

на запрос, который бы работал с таблицей [Kontr_Users] находящейся на связанном сервере... Может поможете?... А то сам чета пока не осиливаю...
Заранее благодарен!!
16 мар 15, 10:38    [17388057]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Yra
Member

Откуда:
Сообщений: 68
Ругается, что MERGE не работает с удаленными таблицами...

"The target of a MERGE statement cannot be a remote table, a remote view, or a view over remote tables."

Что делать? Подскажите!
16 мар 15, 10:43    [17388077]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yra
Что делать? Подскажите!

Не работать с удаленными таблицами в target of a MERGE
16 мар 15, 10:44    [17388087]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Yra
Member

Откуда:
Сообщений: 68
Хе! Логично!
А как же обновлять сетевую таблицу [Kontr_Users] (на связанном сервере), если есть новые записи в локальной [Users] ? Они после восстановления связи между серверами должны быть как копия друг друга....
16 мар 15, 10:54    [17388151]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yra
А как же обновлять сетевую таблицу [Kontr_Users] (на связанном сервере), если есть новые записи в локальной [Users] ?

Вы только комнаду MERGE знаете ? Про INSERT/UPDATE/DELETE ничего не слышали ?
16 мар 15, 10:57    [17388171]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Yra
Member

Откуда:
Сообщений: 68
Наверно в моем случае будет так?

INSERT [VM-FREDDY\SQLEXPRESS].[work].[dbo].[Kontr_Users] AS t
SELECT * FROM [Users] WHERE [Users].[ID]<>t.[ID]

но ругается
"Incorrect syntax near the keyword 'AS'."

что не так при объявлении алиаса?
16 мар 15, 11:20    [17388281]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yra
что не так при объявлении алиаса?

Вы не пробовали синтаксис брать из хелпа ?
16 мар 15, 11:22    [17388297]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 612
Yra,

что-то вроде

INSERT [VM-FREDDY\SQLEXPRESS].[work].[dbo].[Kontr_Users] 
SELECT * FROM [Users] u 
LEFT JOIN [VM-FREDDY\SQLEXPRESS].[work].[dbo].[Kontr_Users] t ON u.[ID] = t.[ID]
WHERE t.[ID] IS NULL


А вообще, надо и правда почитать чего про синтакс INSERT в SQL.
16 мар 15, 11:26    [17388326]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Yra
Member

Откуда:
Сообщений: 68
Вы имеете ввиду синтаксис инструкции INSERT или не так объявлен алиас?
16 мар 15, 11:27    [17388338]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yra
Вы имеете ввиду синтаксис инструкции INSERT или не так объявлен алиас?

Алиас - это часть синтаксиса, если вы не знали
16 мар 15, 11:29    [17388350]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Yra
Member

Откуда:
Сообщений: 68
Ну я наверняка что- то не так понимаю.... Конечно я открывал справку и ситаксис в моем понимании
INSERT [имя таблицы] (поля) VALUES (значения полей)

если вставка из другой таблицы
INSERT [имя таблицы] SELECT * FROM [имя др.таблицы]

Я просто во втором случае пытаюсь вставить алиас... [имя таблицы] as t
и потом при выборке из другой таблицы поставить условие выборки,
чтобы вставлялись записи в [имя таблицы] которых нет в [имя др.таблицы] (WHERE [имя др.таблицы].[ID] <> [имя таблицы].[ID])

или что то не так понимаю... Почему на объявление алиаса ругается (или его нельзя объявлять в этом месте)?

Диклевич Александр

Я не совсем понимаю ваш запрос - для меня сложный - но он у меня выдал ошибку
"Column name or number of supplied values does not match table definition." - хотя по структуре обе таблицы одинаковы,

Заранее извеняюсь за свое недопонимание... Я только разбираюсь...
16 мар 15, 11:48    [17388514]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yra
Я просто во втором случае пытаюсь вставить алиас... [имя таблицы] as t

Где в описании INSERT вы нашли место с алиасами ? Процитируйте ваше "Конечно я открывал справку и ситаксис"
16 мар 15, 11:52    [17388546]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Yra
Member

Откуда:
Сообщений: 68
Сайт где доступно про INSERT http://www.sql-tutorial.ru/ru/book_operator_insert.html

Да, там про алиас ни слова. Я видел...
Но я думал, что алиас можно объявлять для упрощения восприятия запроса...
Итиого - что алиас в иструкции INSERT объявлять нельзя?

Но если не через него:
INSERT [VM-FREDDY\SQLEXPRESS].[work].[dbo].[Kontr_Users]
SELECT * FROM [Users] WHERE [Users].ID <> [VM-FREDDY\SQLEXPRESS].[work].[dbo].[Kontr_Users].ID

то вываливается уже знакомое
"The multi-part identifier "VM-FREDDY\SQLEXPRESS.work.dbo.Kontr_Users.ID" could not be bound."

Какой выход?
16 мар 15, 12:47    [17389017]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Glory
Member

Откуда:
Сообщений: 104751
Yra
Сайт где доступно про INSERT

Документация производителя https://msdn.microsoft.com/en-us/library/ff848766(v=sql.110).aspx

Yra
Да, там про алиас ни слова. Я видел...
Но я думал, что алиас можно объявлять для упрощения восприятия запроса...

Вы не думали, вы ПРИдумали

Yra
Какой выход?

Простой. Для начала понять, что INSERT и SELECT - это два разных запроса.
Потом
- сначала написать правильный SELECT
- потом написать правильный INSERT с этим SELECT
16 мар 15, 12:51    [17389037]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
o-o
Guest
Yra
Диклевич Александр

Я не совсем понимаю ваш запрос - для меня сложный - но он у меня выдал ошибку
"Column name or number of supplied values does not match table definition." - хотя по структуре обе таблицы одинаковы,

вам дали правильный запрос, только человек же не знает, какие там у вас поля,
перечислите их сами в явном виде.
вот официальные примеры на все случаи жизни:
INSERT Examples (Transact-SQL)
обратите внимание на явное перечисление полей во всех абсолютно примерах
16 мар 15, 12:58    [17389084]     Ответить | Цитировать Сообщить модератору
 Re: Запрос между таблицами из разных серверов КАК?  [new]
Yra
Member

Откуда:
Сообщений: 68
Ну я согласен, что в начале своего пути все мы зачастую что-то ПРИдумываем.... И все мы учимся друг у друга.. Настало мое время разбираться.
Начнем с запроса
SELECT * FROM [Users] WHERE [Users].ID <> [VM-FREDDY\SQLEXPRESS].[work].[dbo].[Kontr_Users].ID
выдает ошибку
"The multi-part identifier "VM-FREDDY\SQLEXPRESS.work.dbo.Kontr_Users.ID" could not be bound."

Как обратиться к [VM-FREDDY\SQLEXPRESS].[work].[dbo].[Kontr_Users].ID чтобы все было гладко?
Можете разложить по полочкам, если не трудно?
16 мар 15, 13:05    [17389116]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить