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

Откуда: Санкт-Петербург
Сообщений: 6
Доброго времени суток.
Направьте на путь истинный. Как можно вставить данные в такую БД
Картинка с другого сайта.

К сообщению приложен файл. Размер - 18Kb
27 ноя 13, 20:42    [15201815]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
Если в таблицах нет записей, то никак, пока хотя бы один FK не будет nullable.
Если данные есть, то взять любой FK, после проапдейтить на нужный.
27 ноя 13, 20:45    [15201827]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
snaut_
Направьте на путь истинный.


Перепроектировать модель данных.

ЗЫ. Здесь Вам не Oracle с его deferred constraint.
27 ноя 13, 20:53    [15201853]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
pkarklin
snaut_
Направьте на путь истинный.


Перепроектировать модель данных.

ЗЫ. Здесь Вам не Oracle с его deferred constraint.
Можно и с такой моделью жить, предварительно перед навешиванием констрейнтов впилив в каждую из таблиц что-то типа (id = -1, fk_id = -1, name = '<нет данных>').
27 ноя 13, 20:56    [15201864]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
snaut_
Member

Откуда: Санкт-Петербург
Сообщений: 6
Спасибо за ответ, Сергей. Так у меня и получилось сделать. Но я думаю это грязный хак. И должен быть другой путь. Ведь как-то появились первые записи.

Я пытался сделать несколькими запросами в пределах транзакции. Как я понимаю пока транзакция не завершена, проверка ограничений целостности не должно проводиться.
INSERT INTO interface (Interface) VALUES ('192.168.0.1')
DECLARE @interfaceid
SET @interfaceid = SELECT InterfaceID FROM interface WHERE Interface = '192.168.0.1'
INSERT INTO device (InterfaceID, Name) VALUES (@interfaceid, 'роутер')
UPDATE interface SET DeviceID = (SELECT DeviceID FROM device WHERE Name = 'роутер')
go

Но БД не согласилась принять пустое значение в первом запросе. Можно ли развить это направление? Я откровенно не очень хорош с SQL.
27 ноя 13, 21:00    [15201883]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
Гавриленко Сергей Алексеевич
Можно и с такой моделью жить, предварительно перед навешиванием констрейнтов впилив в каждую из таблиц что-то типа (id = -1, fk_id = -1, name = '<нет данных>').


Безусловно, выкрутиться можно. Но, если

1. Система создается с нуля - то модель данных надо перепроектировать;
2. Система портируется с Oracle - то модель данных надо перепроектировать.
27 ноя 13, 21:02    [15201888]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
snaut_
Member

Откуда: Санкт-Петербург
Сообщений: 6
pkarklin, это существующая БД некой системы мониторинга. Уж так она сделана, ничего не попишешь.
27 ноя 13, 21:02    [15201893]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
snaut_
это существующая БД некой системы мониторинга. Уж так она сделана, ничего не попишешь.


Существующая? И, вдруг, возникает сабжевый вопрос? Как же она существовала то до сегодня, 20:42?!
27 ноя 13, 21:04    [15201900]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37050
snaut_
Ведь как-то появились первые записи.
Они появились в тот момент, когда еще не было хотя бы одного из двух констрейнтов.
27 ноя 13, 21:04    [15201901]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
snaut_
Как я понимаю пока транзакция не завершена, проверка ограничений целостности не должно проводиться.


Понимание, как правило, приходит после прочтения документации.
27 ноя 13, 21:05    [15201907]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
В общем, пришло время лаб и курсовых...
27 ноя 13, 21:08    [15201919]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
snaut_
Member

Откуда: Санкт-Петербург
Сообщений: 6
pkarklin, зачем вы такое хамло.
База существовала и существует с софтом. Виндовое приложение с окошками и кнопочками. Проблема в том, что добавлять сотни устройств кликая мышкой очень затратно. Потому появилась идея делать это скриптом. API нет, но есть описание БД, так что так вот и вышло.

Я не против читать документацию. Дайте линк если что-то знаете по этой теме.
27 ноя 13, 21:12    [15201932]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
snaut_
База существовала и существует с софтом


И она действительно на MS SQL? Скрипт на создание таблиц со всеми ограничениями приведите, а не картинки. Кстати, откуда они взялись?

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


Ну так возьмите Profiler из комплекта поставки и посмотрите, какие инструкции отправляет приложение после мышекликов в оном.

snaut_
Я не против читать документацию. Дайте линк если что-то знаете по этой теме.


По теме документации? Знаю! Вы бы хоть версию сервера озвучили...
27 ноя 13, 21:27    [15201983]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
snaut_
Member

Откуда: Санкт-Петербург
Сообщений: 6
pkarklin, тут я боюсь начну вас путать. Картинки я рисовал сам. Чтобы проилюстрировать суть моего вопроса.
Сервер MS SQL 2005, указал в теме.

Я хотел бы избежать этих пространных подробностей, но если нужно максимально приблизиться к реальности, то вот интересующая меня часть БД которую я нарисовал основываясь на описании структуры.
Описание БД
Описание каких таблиц запостить?

P.S. Я никого не хочу напрягать этим монстром. Потому и нарисовал схематичные картинки в первом посту. Если что я уйду.
27 ноя 13, 21:49    [15202062]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
step_ks
Member

Откуда:
Сообщений: 936
set identity_insert on ?
27 ноя 13, 22:06    [15202124]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
step_ks
Member

Откуда:
Сообщений: 936
step_ks
set identity_insert on ?

ан нет, отбой
27 ноя 13, 22:08    [15202129]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74925
snaut_
Если что я уйду.


Не надо. Нарисованная Вами схема соответствует тому, что описано в документации. Если это действительно FK, то только танцы с бубном, как посоветовал Гавриленко Сергей Алексеевич.

Но, если это разовая операция по заливке, то я бы просто отключил (или даже снес) эти ограничения, залил бы данные, а потом их включил (создал).
27 ноя 13, 22:13    [15202141]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
snaut_
Member

Откуда: Санкт-Петербург
Сообщений: 6
Я планирую сделать интеграцию с системой учета, так что это не разовая заливка данных. Чтож придется танцевать с бубном) Воспользуюсь советом Сергея.

Спасибо за помощь.
28 ноя 13, 11:59    [15204624]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
DaniilSeryi
Member

Откуда:
Сообщений: 1734
Я бы автора такой схемы, как на рисунке, уволил бы нафиг.
С другой стороны, какая изящная месть перед увольнением - БД жива, данные живы, а работать (вставлять новые данные) нормально нельзя.
С третьей стороны, тут или кардинальное упрощение схемы напрашивается - всё валить в одну таблицу, если 1 интерфейс - 1 устройство, и 1 устройство - 1 интерфейс; либо усложнение - добавление таблицы связей с удалением старых FK и созданием новых.
Вариант с убийством лишнего FK, как мне кажется, ТС даже не рассматривает.
28 ноя 13, 14:36    [15206171]     Ответить | Цитировать Сообщить модератору
 Re: MSSQL2005 вставка в две таблицы с обоюдными FK constraint  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
snaut_
Виндовое приложение с окошками и кнопочками. Проблема в том, что добавлять сотни устройств кликая мышкой очень затратно. .

я бы все таки посмотрел, каким образом это приложение вставляет данные в эти таблицы.
запустите профайлер
28 ноя 13, 16:04    [15206888]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить