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

Откуда:
Сообщений: 48
Добрый день.
Подскажите, пожалуйста, не смог найти решение такой проблемы:

Есть таблица на полях которой висят триггеры, ограничении уникальности и прочее, назовем ее [Main].
Есть таблица с такй же структурой из которой я хочу вставить записи, назовем ее [Temp].
Если я напишу запрос
INSERT INTO [Main] SELECT * FROM [Temp]

То сработают ограничения, триггеры и ничего не вставится. Я хочу обработать каждую запись. Т.е. чтобы запись, которая удовлетворяет всем условиям - вставилась, а на каждую "неправильную" запись - возвращалась ошибка.
Как такое можно реализовать?
Заранее спасибо.
23 мар 15, 15:53    [17420287]     Ответить | Цитировать Сообщить модератору
 Re: INSERT INTO всех "правильных" записей  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Вставлять по одной. Или отфильтровывать все, что нарушает ваши ограничения.
23 мар 15, 15:57    [17420319]     Ответить | Цитировать Сообщить модератору
 Re: INSERT INTO всех "правильных" записей  [new]
KOPOJlb
Member

Откуда:
Сообщений: 48
Вставлять по одной мне подходит - только я пока не могу понять, как это можно сделать? Вычислить все ID, а потом циклом по их количеству?
23 мар 15, 15:59    [17420331]     Ответить | Цитировать Сообщить модератору
 Re: INSERT INTO всех "правильных" записей  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
KOPOJlb
Вставлять по одной мне подходит - только я пока не могу понять, как это можно сделать? Вычислить все ID, а потом циклом по их количеству?


Значит вам надо внимательно изучить все эти триггеры и ограничения, и написать скрипт, который будет отсекать все те записи, которые ограничениям не удовлетворяют.
23 мар 15, 16:04    [17420365]     Ответить | Цитировать Сообщить модератору
 Re: INSERT INTO всех "правильных" записей  [new]
KOPOJlb
Member

Откуда:
Сообщений: 48
Ну особо внимательно изучать не придется, я их писал)
Только я тогда не понимаю, зачем 2 раза одну и туже работу выполнять (Триггеры писать и проверку перед вставкой)?
23 мар 15, 16:07    [17420387]     Ответить | Цитировать Сообщить модератору
 Re: INSERT INTO всех "правильных" записей  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
KOPOJlb
Вставлять по одной мне подходит - только я пока не могу понять, как это можно сделать? Вычислить все ID, а потом циклом по их количеству?
Можно циклом по записям.
Но лучше, как писали, вставлять сразу только те записи, которые правильные, поставив соотв. условия.
23 мар 15, 16:07    [17420388]     Ответить | Цитировать Сообщить модератору
 Re: INSERT INTO всех "правильных" записей  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
KOPOJlb
Ну особо внимательно изучать не придется, я их писал)
Только я тогда не понимаю, зачем 2 раза одну и туже работу выполнять (Триггеры писать и проверку перед вставкой)?


Если вы хорошо и правильно напишите проверку, то для повышения скорости можете ограничения убрать (если вы конечно хотите добиться скорости, но при этом пожертвовать гарантиями целостности за счёт грамотного написания кода).
23 мар 15, 16:25    [17420557]     Ответить | Цитировать Сообщить модератору
 Re: INSERT INTO всех "правильных" записей  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
KOPOJlb
Если я напишу запрос
INSERT INTO [Main] SELECT * FROM [Temp]
, ... то вас надо срочно увольнять.
И за отсутствие списка полей [Main], и за звёздочку в SELECTе.
23 мар 15, 16:47    [17420726]     Ответить | Цитировать Сообщить модератору
 Re: INSERT INTO всех "правильных" записей  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21241
KOPOJlb
Как такое можно реализовать?
Процедура. Курсор.

iap, +1
23 мар 15, 17:08    [17420852]     Ответить | Цитировать Сообщить модератору
 Re: INSERT INTO всех "правильных" записей  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
KOPOJlb
Ну особо внимательно изучать не придется, я их писал)
Только я тогда не понимаю, зачем 2 раза одну и туже работу выполнять (Триггеры писать и проверку перед вставкой)?

Назначение триггеров и ограничений - проверять качество данных, а не фильтровать их.
23 мар 15, 17:36    [17421053]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить