|
|
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
Здравствуйте уважаемые! Не так давно перешел на SQL Server. Возникла потребность периодически обменивать данными 2 БД. Возможно ли в принципе организовать подобную синхронизацию данных средствами T-SQL? В принципе интересуют возможности СУБД. Это как минимум: 1. последовательный перебор записей в выборке с определенными действиями 2. поиск записи в выборке 3. ну и добавление/изменение записи С третим пунктом разобраться смогу (привел лишь для полноты). А вот Первые два поставили меня в тупик. Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2002, 18:30:37 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
А обязательно надо на T-SQL? Если на T-SQL - то, наверное, можно через курсоры и linked servers. Но я бы DTS использовал, хотя все от деталей зависит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2002, 19:52:50 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
Я такое сделал с помощью курсора. Перебирал записи если такая запись (по ключу) существовала то апдейтил ее если ее небыло то добавлял. Но у меня было пару небольших таблиц (справочники). Исходая база не моя поэтому репликацию не использовал. Курсор это самый медленный способ работы хотя индексы здорово могут поднять его производительность Работало это в одну сторону. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.08.2002, 20:17:10 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
Возможно ли в принципе организовать подобную синхронизацию данных средствами T-SQL? А чем не устроили репликации? можно в крсоре использовать удаленные процедуры (линковать сервер. Репликация так и делает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2002, 03:58:58 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
2 andreym999 Интересно, а зачем курсоры то, если ключ есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2002, 08:01:49 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
Спасибо за отклики. Поясню более детально. 2 базы по структуре не сопоставимы друг с другом напрямую, поэтому технологии репликации и DTS, похоже, не подойдут. Необходимо построить алгоритм сопоставления так, как могут это делать СУБД. Но необходимо, чтобы этот алгоритм запускался периодически вне зависимости от загруженного профиля пользователя. Т.е. либо писать программу и изучать как из нее сделать сервис NT или пытаться встроить в механизмы уже существующего сервиса SQLServer agent. Что я и задумал сделать. Причем структуру одной из баз менять нельзя: это сторонняя программа! andreym999: > Работало это в одну сторону Это Вы о том, что в хранимых процедурах нельзя изменять данные других баз? В любом случае как это сделать? Или где почитать? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2002, 10:03:40 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
как вариант решения: настраиваешь запуск процедуры по расписанию в ней курсорам по записям - выбираешь нужные, пересчитываешь как тебе нужно , записываешь в прилинкованную базу данных. отчет об исполнении заносишь в таблицу, файл, посылаешь по почте или сообщение по SMB. если есть конкретные вопросы сообщи ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2002, 10:42:54 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
Вы знаете, похоже мой вопрос просто по основному синтаксису T-SQL. В той справочной информации, что у меня есть, нет описания конструкций языка, позволяющих проходиться по выборке. Ну к примеру, на Fox'е после select ... into cursor Some я могу: select some scan ... endscan или do while !eof() ... skip enddo И как искать конкретную запись в выборке. Ну как seek(some.fk,"some2","fk")? Где прочитать о подобном для T-SQL. Возможно я плохо искал, но сколько бы мне не попадалось статей они все об особенностях select-SQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2002, 10:59:11 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
Возможно я понял: написать процедуру, которая делала бы с записью то, что необходимо, и вызывать ее для определенного select в части when или в качестве вычисляемого поля. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2002, 11:06:44 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
дык на SQL-е надо не с записями работать, а с данными ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2002, 12:09:33 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
>Где прочитать о подобном для T-SQL. Возможно я плохо искал, но сколько бы мне не попадалось статей они все об особенностях select-SQL почитай BOL , раздел declare cursor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2002, 12:30:56 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
А почему DTS не подходит - ну разные структуры у Вас - ну и что? DTS - это ж просто VBScript - на нем что угодно можно сделать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2002, 14:16:07 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
Alexander_Chepack > А почему DTS не подходит ... DTS - это ж просто VBScript Похоже, Вы правы, его можно рассматривать как альтернативный вариант. Но для такого новичка, как я, оказалось проще sql-скриптом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2002, 14:38:51 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
Опять я ничего не понял. Обе таблицы на одном MS SQL-сервере или "сторонняя" таблица на чем нибудь другом? Если на другом - то DTS. Если обе таблицы в MS SQL, то что надо конкретно? 1. Добавить в "свою", то что есть в "чужой", но нет в "своей"? Обратная операция? 2. Удалить из "своей", то чего нет в "чужой"? Обратная операция? 3. Изменить значения в "своей" в зависимости от значений в "чужой"? Обратная операция? 1. последовательный перебор записей в выборке с определенными действиями Не надо делать никаких переборов в выборке. Прежде всего это надо попытаться сделать через UPDATE с условием. Существует очень мало задач для которых выгоднее использовать курсоры. 2. поиск записи в выборке Опять же не надо искать никаких записей в выборке. Надо использовать select с условием и сразу получать результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.08.2002, 23:08:17 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
? 1. последовательный перебор записей в выборке с определенными действиями я использую временные таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2002, 07:12:13 |
|
||
|
Что возможно ли на T-SQL?
|
|||
|---|---|---|---|
|
#18+
Наконец то добрался до форума То Genady_ Я не только инсертил недостающие записи, но и апдейтил существующии. Как заапдейтить без курсора не знаю. У меня не получилось (записей то много и у каждой свой ключ) То hepry У меня была база чужая и своя. И вот в этой чужой базе были отличные справочники которые я конечно захотел использовать и получить еще к тому же связи в моей базе и т.п. и еще иметь всегда относительно свежую версию. Принцип работы курсора следующий: В исходной таблице читаем по очереди записи: если есть соответствие в моей таблице то апдейтим все поля в моей таблице если такой записи нет то инсертим в таблицу новую запись. И все. В принципе можно написать курсор который с помощью бизнес-правил будет переносить данные в обе стороны, хотя это уже похоже больше на репликацию слиянием, а потому вопрос что нельзя никак по другому выкрутиться ? А то это уже похоже на изобретение велосипеда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.08.2002, 20:09:25 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32041108&tid=1821301]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
49ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 356ms |

| 0 / 0 |
