Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft SQL Server
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
MrSmitt
1 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 139
1

Обращение к разным БД

17.12.2016, 16:01. Просмотров 934. Ответов 13
Метки нет (Все метки)

Есть 2 базы данных (base1 и base2) , в одной из них существует таблица Car(VIN,Model) в другой бд таблица Repair(Repair_code, VIN).

Хочется , чтобы при добавлении VIN в табл. Repair (т.е. машина с вин номером ушла на ремонт) срабатывал триггер, который удалял бы автомобиль с этим вин номером из табл Car.
И наоборот, при удалении из табл. Repair, автомобиль добавлялся в табл. Car.

Я так понимаю нужно создать триггер? Могли бы помочь с синтаксисом?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.12.2016, 16:01
Ответы с готовыми решениями:

Выбор данных по разным датам
Здравствуйте. Возникла проблема со следующей задачей. Есть база данных из нее...

Выборка по разным значениям двух колонок
Имеется таблица, по сути помойка, со всяким рэндомом в колонках 2 и 3, по типу:...

Вывести количество по разным where в одном результате
Сложно сформулировать, потому сразу пример: денег вася 1 вася 2 вася 3...

COUNT, по разным таблицам, по каждому ключу
Уже пару дней ломаю голову, как сделать. Начал изучать T-SQL, но пока не могу...

Как объединить данные с разным набором характеристик?
Добрый день! Необходима помощь специалистов! Есть необходимость хранить в базе...

13
YuryK
1030 / 847 / 337
Регистрация: 08.12.2016
Сообщений: 3,283
17.12.2016, 18:20 2
Т.е. в обеих базах всего по одной таблице? Зачем же их тогда гордо называть базами?
Или просто там автомобили с остальными объектами никак не связаны, а в остальном базы очень даже хороши?
1
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
18.12.2016, 11:04 3
Цитата Сообщение от MrSmitt Посмотреть сообщение
который удалял бы автомобиль с этим вин номером из табл Car.
Самое глупое, что можно делать с данными в базе - это удалять их оттуда. Ладно бы флаг какой-то выставить, что машина в ремонте - нет, удалить запись!!

А со связанными записями в других таблицах что делать?
0
invm
1891 / 1280 / 383
Регистрация: 02.06.2013
Сообщений: 3,241
18.12.2016, 11:35 4
Цитата Сообщение от texnik-san Посмотреть сообщение
А со связанными записями в других таблицах что делать?
Как что? FK делать с каскадным удалением - они сами удалятся
Излюбленный прием "проектировщиков" БД...
0
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
18.12.2016, 12:12 5
А кода запись в таблицу Car снова добавится - связанные заиси ккадным добавлением сами вернутся?

Или уже не нужны будут - "ведь после ремонта это уже совсем другая машина"?
0
invm
1891 / 1280 / 383
Регистрация: 02.06.2013
Сообщений: 3,241
18.12.2016, 12:41 6
Цитата Сообщение от texnik-san Посмотреть сообщение
А кода запись в таблицу Car снова добавится - связанные заиси ккадным добавлением сами вернутся?
Возможно, когда-нибудь, такую фичу реализуют На радость "проектировщикам"
0
MrSmitt
1 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 139
18.12.2016, 15:14  [ТС] 7
Цитата Сообщение от texnik-san Посмотреть сообщение
нет, удалить запись!!
Ну как удалить, удалить из таблицы Car и сразу же добавить в таблицу "Наремонте". Когда надо будет вернуть машину , удалить из таблицы "наремонте" и вставить в таблицу Car. Костыли от горе "проектироващика" знаю знаю...
Цитата Сообщение от invm Посмотреть сообщение
Как что? FK делать с каскадным удалением
Ничего не делать, а точнее запретить. Нельзя отправить авто в ремонт, если оно используется.

Цитата Сообщение от texnik-san Посмотреть сообщение
Ладно бы флаг какой-то выставить,
0
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
18.12.2016, 15:41 8
Лучший ответ Сообщение было отмечено MrSmitt как решение

Решение

Цитата Сообщение от MrSmitt Посмотреть сообщение
Нельзя отправить авто в ремонт, если оно используется.
А если оно использовалось вчера или неделю назад? Или вы и данные прошлых использованиях тоже удаляете?

Цитата Сообщение от MrSmitt Посмотреть сообщение
Ну как удалить, удалить из таблицы Car и сразу же добавить в таблицу "Наремонте".
Нет, так не делают. Делают поле "КодСостояния" в таблице машин, и справочник состояний. Скажем,

1 Готова к работе
2 Используется
0 На ремонте
-1 Неисправна
-2 Списана

И в зависимости от того, что происходит с машиной, в поле Состояние вносится соответствующий код. А если вам нужен список машин, которые находятся в рабочем состоянии, делаете

SQL
1
2
3
SELECT ...(тут список полей)
FROM Car 
WHERE КодСостояния >0
А записи из таблицы не удаляются вообще никогда.
0
MrSmitt
1 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 139
18.12.2016, 16:32  [ТС] 9
Дельный совет
Цитата Сообщение от texnik-san Посмотреть сообщение
не удаляются вообще никогда.
табу?
тогда похоже имеет смысл обновлять таблицу Car (обновлять поле "КодСостояния"?) при добавлении VIN в таблицу ремонт?
Как должен выглядеть подобного рода запрос, учитывая что они находятся в разных бд.
0
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
18.12.2016, 18:25 10
Но на одном сервере же? Если да, то проще пареной репы: в явном виде указываем все части техчастного имени

SQL
1
ИмяБазы.Схема.ИмяТаблицы
для всех таблиц, входящих в запрос. И все.

Добавлено через 4 минуты
Цитата Сообщение от MrSmitt Посмотреть сообщение
табу?
Не табу. Если данные внесены по ошибке, то удалять их, конечно, можно.

Также считается довольно нормальной процедура удаления "давно прошедших" данных после копирования в архив. Скажем, в 2107 году уже врядли нужна информация о машинах, списанных в 2013м.

Но в архиве пускай лежит - мало ли, встанет вопрос "какой марки нам купить новю технику - у какой из наших старых было лучше соотношение стоимости обслуживания к пробегу?" - и понадобится поднять из архива данные и о той машине тоже.
0
MrSmitt
1 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 139
21.12.2016, 21:26  [ТС] 11
Цитата Сообщение от texnik-san Посмотреть сообщение
И все.
где закралась ошибка ?
SQL
1
UPDATE base1.dbo.Car SET base1.dbo.Car.Status='В ремонте' FROM base1.dbo.Car INNER JOIN base2.dbo.Repair ON base1.dbo.Car.VIN=base2.dbo.Repair.VIN
0
Hikari
Хитрая блондиночка $)
1451 / 963 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
21.12.2016, 21:41 12
Цитата Сообщение от MrSmitt Посмотреть сообщение
в одной из них существует таблица Car(VIN,Model) в другой бд таблица Repair
Зря ты смешиваешь справочник и таблицу движения объекта... Добром это не кончится.
Цитата Сообщение от texnik-san Посмотреть сообщение
Ладно бы флаг какой-то выставить, что машина в ремонте
Однозначно флаг. А лучше добавить два поля типа даты: Дата поступления на ремонт, дата возврата из ремонта. И ID машины из справочника. Удалять и\или перекидывать из таблицы в таблицу не приведет к улучшению работы ПО, а только зафрагментирует базу, что плохо сказывается на работе как ни как.
0
MrSmitt
1 / 1 / 0
Регистрация: 20.10.2013
Сообщений: 139
21.12.2016, 22:36  [ТС] 13
Цитата Сообщение от Hikari Посмотреть сообщение
Однозначно флаг.
так вот как бы собираюсь обновлять "Статус" авто на "в ремонте", если ВИН авто оказывается в таблице Repair, да только вот не пойму что не так
Цитата Сообщение от MrSmitt Посмотреть сообщение
где закралась ошибка ?
0
texnik-san
шапоклякистка 8-го дня
3630 / 2191 / 389
Регистрация: 26.06.2015
Сообщений: 4,648
Записей в блоге: 1
22.12.2016, 01:31 14
Цитата Сообщение от MrSmitt Посмотреть сообщение
где закралась ошибка ?
Как я должна вам угадывать, где ошибка, если вы не удосужились даже написать, какую именно ошибку вам выдал сервер?

По крайней мере, ошибка не в методе наименования таблиц.
1
22.12.2016, 01:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.12.2016, 01:31

Запрос выборки по разным полям, а результат в одну таблицу
Есть такой запрос например SELECT ALL Фамилия, Имя, Отчество, Страна INTO ...

Оптимизация условий отбора данных с таблицы по разным критериям
Всем привет. Есть таблица-классификатор, в которой досконально...

Подсчет количества по разным значениям столбца в одном запросе
Здравствуйте. Подскажите как сделать лучше. допустим есть таблица в которой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru