Re: Исключение данных на вставку
От: Olaf Россия  
Дата: 03.01.17 12:55
Оценка:
Здравствуйте, peer, Вы писали:

P>Есть таблица в базе.

P>В нее вставляются некоторые данные внешним приложением или процедурой.
P>Задача: Нужно некоторые данные не вставлять.

Возможно EF ожидает результат вставки через @@rowcount или scope_identity(), а в итоге получает 0. В любом случае нужно быть осведомленным на все 100% в том, что происходит дальше после вставки в эту таблицу. Даже если предположить, что удалось вставить данные и EF нормально отработал эту ситуацию, дальнейшая логика приложения может быть построена таким образом, что полученный идентификатор (запись) после вставки используется в других таблицах как FK.
Если рассмотреть идеальный случай, т.е. таблица не имеет связей с другими таблицами и логика приложения заключается лишь в том, что данные вставляются только в нее одну, то можно рассмотреть вариант с AFTER триггером на вставку через удаление. Вариант конечно сомнительный, т.к. для того чтобы проигнорировать вставку, нужно сначала вставить, а потом удалить, но если очень нужно...

  Скрипт для MS SQL
CREATE TABLE dbo.T1
(
    [Id] [int] IDENTITY(1,1) NOT NULL PRIMARY KEY,
    [Value1] [varchar](50) NULL
)
GO

CREATE TRIGGER [dbo].[trg_T1_I]
   ON  [dbo].[T1]
   AFTER INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    delete t1
    from inserted i
    join dbo.T1 t1 on i.Id = t1.Id    
    where t1.Value1 like 'A%'

END

GO

insert into dbo.T1(Value1)
select 'A' union all select 'FG'

select SCOPE_IDENTITY(), @@ROWCOUNT

Другой вариант — вставлять все подряд, а потом ненужные данные удалять по расписанию, но здесь многое зависит от вашего бизнес-процесса, насколько это критично.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.