Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Insert into таблиц из разных баз  [new]
laifik
Member

Откуда:
Сообщений: 190
Есть немного усложненный запрос тем, что Table2 и Table3 связаны друг с другом по ключу и находятся в одной базе данных. А Table1, куда нужно копировать строку из двух других таблиц, находится на другом сервере и в другой БД. (Этот запрос у меня намного сложнее - поэтому такая структура. Кол-во полей сократила до минимума, чтобы легче было видеть сам запрос).
автор
Insert Into Table1
(KodSyst, Massa)
SELECT V.PRJ AS KodSyst, V.MASSA AS Massa

FROM (
SELECT dbo.Table2.PRJ, dbo.Table3.MASSA
FROM dbo.Table2 INNER JOIN
dbo.Table3 ON dbo.Table2.PRJ = dbo.Table3.PRJ) V
Where V.PRJ in (7)

Как в этот запрос вставить ссылку (адрес) нахождения Table2 и Table3? Должно быть как-то так
автор
FROM NameServer.NameBase.dbo.NameTable
.
Скобка после FROM "(" очень смущает. Из-за нее создается синтаксическая ошибка. dbo.NameTable - это все то, что содержится в
(SELECT dbo.Table2.PRJ...)V.
В общем, не получается создать рабочий запрос.
10 ноя 12, 14:54    [13451410]     Ответить | Цитировать Сообщить модератору
 Re: Insert into таблиц из разных баз  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
laifik
Из-за нее создается синтаксическая ошибка.
В общем, не получается создать рабочий запрос.
Думаю, нужно прочитать текст ошибки, и найти её в полном запросе. Упрощённый запрос у вас синтаксически правильный (хотя удобнее использовать алиасы), только нужно указать, что Table1 из дугого сервера.
10 ноя 12, 15:17    [13451452]     Ответить | Цитировать Сообщить модератору
 Re: Insert into таблиц из разных баз  [new]
laifik
Member

Откуда:
Сообщений: 190
Как раз ошибка в наличии скобки.Но она по тексту нужна после FROM.
10 ноя 12, 19:42    [13452056]     Ответить | Цитировать Сообщить модератору
 Re: Insert into таблиц из разных баз  [new]
laifik
Member

Откуда:
Сообщений: 190
Как раз у меня и не получается указать, откуда таблица 1. Хотя, меня больше интересует указать, откуда таблицы 2 и 3. Таблица 1 находится на действующем сервере и подключена в программе через ADOConnection.
10 ноя 12, 19:45    [13452077]     Ответить | Цитировать Сообщить модератору
 Re: Insert into таблиц из разных баз  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
laifik
Как раз ошибка в наличии скобки.Но она по тексту нужна после FROM.
Нету ошибки, синтаксис правильный.

Не верите - приводите репро и копируйте сюда текст ошибки.
10 ноя 12, 22:11    [13452782]     Ответить | Цитировать Сообщить модератору
 Re: Insert into таблиц из разных баз  [new]
sphinx_mv
Member [заблокирован]

Откуда:
Сообщений: 1672
laifik
Есть немного усложненный запрос тем, что Table2 и Table3 связаны друг с другом по ключу и находятся в одной базе данных. А Table1, куда нужно копировать строку из двух других таблиц, находится на другом сервере и в другой БД. (Этот запрос у меня намного сложнее - поэтому такая структура. Кол-во полей сократила до минимума, чтобы легче было видеть сам запрос).
автор
Insert Into Table1
(KodSyst, Massa)
SELECT V.PRJ AS KodSyst, V.MASSA AS Massa

FROM (
SELECT dbo.Table2.PRJ, dbo.Table3.MASSA
FROM dbo.Table2 INNER JOIN
dbo.Table3 ON dbo.Table2.PRJ = dbo.Table3.PRJ) V
Where V.PRJ in (7)

Как в этот запрос вставить ссылку (адрес) нахождения Table2 и Table3? Должно быть как-то так
автор
FROM NameServer.NameBase.dbo.NameTable
.
Скобка после FROM "(" очень смущает. Из-за нее создается синтаксическая ошибка. dbo.NameTable - это все то, что содержится в
(SELECT dbo.Table2.PRJ...)V.
В общем, не получается создать рабочий запрос.
В приведеннном Вами запросе все синтаксически правильно, но из-за избыточной сложности создается неверное ощущение ошибки.
Открывающая скобка после FROM обрамляет слева подзапрос, после которого должна быть закрывающая скобка (перед алиасом V), хотя особого смысла в этом подзапросе не наблюдается. Точно такой же результат можно получить слегка упростив текст запроса и добавив алиасы таблицам:
INSERT INTO Table1
     (KodSyst, Massa)
SELECT
     A.PRJ AS KodSyst,
     B.MASSA AS Massa
-- FROM (
FROM
     dbo.Table2 AS A INNER JOIN dbo.Table3 AS B ON A.PRJ = B.PRJ
-- ) V
WHERE A.PRJ IN (7)

Текст запроса стал более понятным, поиск ошибок - проще...
Если Table1 находится в другой БД на другом сервере, то Вам на исходном сервере (где расположена БД с таблицами dbo.Table2 и dbo.Table3), как минимум, необходимо создать прилинкованный сервер. Тогда эта таблица станет реально доступна в виде NameServer.NameBase.dbo.Table1, если ее владелец именно dbo, а у пользователя, которым Вы подключаетесь к приллинкованному серверу, есть права на вставку данных в нее.
10 ноя 12, 23:57    [13453297]     Ответить | Цитировать Сообщить модератору
 Re: Insert into таблиц из разных баз  [new]
laifik
Member

Откуда:
Сообщений: 190
Как я поняла, в тексте запроса нельзя прописать местонахождение таблиц, т.е. к какому серверу и БД она относится?
А сам запрос правильный. Вопрос состоял не в его правильном написании, а как прописать абрес таблиц, чтобы он работал.
11 ноя 12, 19:06    [13455222]     Ответить | Цитировать Сообщить модератору
 Re: Insert into таблиц из разных баз  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
laifik
Как я поняла, в тексте запроса нельзя прописать местонахождение таблиц, т.е. к какому серверу и БД она относится?
Можно, вам же писали.

INSERT INTO NameServer.NameBase.dbo.Table1
     (KodSyst, Massa)
...
11 ноя 12, 19:08    [13455231]     Ответить | Цитировать Сообщить модератору
 Re: Insert into таблиц из разных баз  [new]
laifik
Member

Откуда:
Сообщений: 190
автор
INSERT INTO Table1
(KodSyst, GostID, Massa)
SELECT V.PRJ_ID AS KodSyst, V.CODE AS GostID, V.MASSA AS Massa

FROM (
SELECT dbo.Table2.PRJ_ID, dbo.Table3.MASSA, dbo.Table3.CODE, dbo.Table2.CARD_ID
FROM SV.BASA_TEST.dbo.Table2
INNER JOIN
SV.BASA_TEST.dbo.Table3
ON dbo.Table2.CARD_ID = dbo.Table3.CARD_ID) V
Where V.CARD_ID in (2)

Вот, попробовала, и ничего не получается. Путь указать нужно для таблиц 2 и 3.
Ошибка такая:
автор
Server: Msg 107, Level 16, State 2, Line 1
The column prefix 'dbo.Table2' does not match with a table name or alias name used in the query.
11 ноя 12, 20:04    [13455380]     Ответить | Цитировать Сообщить модератору
 Re: Insert into таблиц из разных баз  [new]
laifik
Member

Откуда:
Сообщений: 190
Все, спасибо за помощь. Вставляет. Нужно было прописывать каждое поле и таблицу1 тоже. В итоге это выглядит так:
автор
INSERT INTO Loading.dbo.Loading_Card_20870
(KodSyst, GostID, Massa)
SELECT V.PRJ_ID AS KodSyst, V.CODE AS GostID, V.MASSA AS Massa

FROM (
SELECT BASA_TEST.dbo.CARD_LIST.PRJ_ID, BASA_TEST.dbo.CARD_MASS.MASSA,
BASA_TEST.dbo.CARD_MASS.CODE, BASA_TEST.dbo.CARD_LIST.CARD_ID
FROM BASA_TEST.dbo.CARD_LIST
INNER JOIN
BASA_TEST.dbo.CARD_MASS
ON BASA_TEST.dbo.CARD_LIST.CARD_ID = BASA_TEST.dbo.CARD_MASS.CARD_ID) V
Where V.CARD_ID in (2)

И в моем случае не нужно было указывать имя сервера.
Еще раз, спасибо!
11 ноя 12, 20:15    [13455415]     Ответить | Цитировать Сообщить модератору
 Re: Insert into таблиц из разных баз  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31438
laifik
Все, спасибо за помощь. Вставляет. Нужно было прописывать каждое поле и таблицу1 тоже. В итоге это выглядит так:
Вы же говорили, что источник на текущем сервере, а вставляете на другой.

Вы прописываете сервер для источника, а не для приёмника, а нужно наоборот.
laifik
И в моем случае не нужно было указывать имя сервера.
Это противаречит
laifik
А Table1, куда нужно копировать строку из двух других таблиц, находится на другом сервере и в другой БД
11 ноя 12, 23:20    [13456013]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить