Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Что делать?Нужен совет  [new]
Beat It
Member

Откуда: СПБ
Сообщений: 11
Всем привет!Объясните почему не могу удалить записи из таблицы
товар.И как все таки ее удалить?Помогите с триггером.
Сильно не пинайте я зеленый еще совсем.

К сообщению приложен файл. Размер - 48Kb
16 мар 12, 16:40    [12262021]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Glory
Member

Откуда:
Сообщений: 104751
Beat It
Объясните почему не могу удалить записи из таблицы товар.

А почему вы решили, что не можете ?

Beat It
И как все таки ее удалить?

Командой DELETE

Beat It
Помогите с триггером.

И причем тут триггер ?
16 мар 12, 16:43    [12262059]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Beat It
Member

Откуда: СПБ
Сообщений: 11
при удалении записи из таблицы товар получаю

К сообщению приложен файл. Размер - 24Kb
16 мар 12, 16:46    [12262092]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Glory
Member

Откуда:
Сообщений: 104751
Beat It
при удалении записи из таблицы товар получаю

И вы прочитали ErrorMessage ?
16 мар 12, 16:49    [12262126]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Beat It
Member

Откуда: СПБ
Сообщений: 11
Glory,

простите не понимаю о чем вы?что нужно сделать?
16 мар 12, 16:51    [12262145]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Glory
Member

Откуда:
Сообщений: 104751
Beat It
простите не понимаю о чем вы?что нужно сделать?

Читать сообщения об ошибках нужно.
Их для того и пишут.
16 мар 12, 16:52    [12262153]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Beat It
Member

Откуда: СПБ
Сообщений: 11
Glory,

где читать???
16 мар 12, 16:54    [12262165]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Glory
Member

Откуда:
Сообщений: 104751
Beat It
Glory,

где читать???

Вы вообще на предложенном вами же скриншоте ошибке хоть одно слово прочли ?
16 мар 12, 16:58    [12262204]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Beat It
Member

Откуда: СПБ
Сообщений: 11
Glory,

да и что?я не понимаю в чем дело...ссори
16 мар 12, 17:00    [12262225]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Beat It
Member

Откуда: СПБ
Сообщений: 11
ну помогите!
16 мар 12, 17:11    [12262314]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
кириллk
Member

Откуда:
Сообщений: 1062
Beat It,

как я понимаю проблема со связкой товар и категория товара...?
я могу ошибаться
16 мар 12, 17:40    [12262526]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Beat It
Glory,

да и что?я не понимаю в чем дело...ссори
Нужно найти автора триггера и спросить, в чем дело.
16 мар 12, 17:40    [12262530]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
lapposv
Member

Откуда: Санкт-Петербург
Сообщений: 27
Гавриленко Сергей Алексеевич
Beat It
Glory,

да и что?я не понимаю в чем дело...ссори
Нужно найти автора триггера и спросить, в чем дело.


Или показать содержимое триггера, если он есть.
16 мар 12, 17:48    [12262610]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Beat It
Member

Откуда: СПБ
Сообщений: 11
триггеры которые есть в таблице товар
+
[spoiler]
USE [db_comptech]
GO
/****** Object:  Trigger [dbo].[tD_Товар]    Script Date: 03/17/2012 09:37:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tD_Товар] ON [dbo].[Товар] FOR DELETE AS
/* ERwin Builtin Trigger */
/* DELETE trigger on Товар */
BEGIN
  DECLARE  @errno   int,
           @errmsg  varchar(255)
    /* ERwin Builtin Trigger */
    /* Товар  Продажи on parent delete no action */
    /* ERWIN_RELATION:CHECKSUM="0007d5c9", PARENT_OWNER="", PARENT_TABLE="Товар"
    CHILD_OWNER="", CHILD_TABLE="Продажи"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_26", FK_COLUMNS="Код_товара" */
    IF EXISTS (
      SELECT * FROM deleted,Продажи
      WHERE
        /*  %JoinFKPK(Продажи,deleted," = "," AND") */
        Продажи.Код_товара = deleted.Код_товара
    )
    BEGIN
      SELECT @errno  = 30001,
             @errmsg = 'Cannot delete Товар because Продажи exists.'
      GOTO ERROR
    END

    /* ERwin Builtin Trigger */
    /* Товар  Владелец on parent delete no action */
    /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Товар"
    CHILD_OWNER="", CHILD_TABLE="Владелец"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_33", FK_COLUMNS="Код_товара" */
    IF EXISTS (
      SELECT * FROM deleted,Владелец
      WHERE
        /*  %JoinFKPK(Владелец,deleted," = "," AND") */
        Владелец.Код_товара = deleted.Код_товара
    )
    BEGIN
      SELECT @errno  = 30001,
             @errmsg = 'Cannot delete Товар because Владелец exists.'
      GOTO ERROR
    END

    /* ERwin Builtin Trigger */
    /* Товар  Гарантийный_талон on parent delete no action */
    /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Товар"
    CHILD_OWNER="", CHILD_TABLE="Гарантийный_талон"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_37", FK_COLUMNS="Код_товара" */
    IF EXISTS (
      SELECT * FROM deleted,Гарантийный_талон
      WHERE
        /*  %JoinFKPK(Гарантийный_талон,deleted," = "," AND") */
        Гарантийный_талон.Код_товара = deleted.Код_товара
    )
    BEGIN
      SELECT @errno  = 30001,
             @errmsg = 'Cannot delete Товар because Гарантийный_талон exists.'
      GOTO ERROR
    END

    /* ERwin Builtin Trigger */
    /* Категория_товара  Товар on child delete no action */
    /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Категория_товара"
    CHILD_OWNER="", CHILD_TABLE="Товар"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_8", FK_COLUMNS="Код_категории" */
    IF EXISTS (SELECT * FROM deleted,Категория_товара
      WHERE
        /* %JoinFKPK(deleted,Категория_товара," = "," AND") */
        deleted.Код_категории = Категория_товара.Код_категории AND
        NOT EXISTS (
          SELECT * FROM Товар
          WHERE
            /* %JoinFKPK(Товар,Категория_товара," = "," AND") */
            Товар.Код_категории = Категория_товара.Код_категории
        )
    )
    BEGIN
      SELECT @errno  = 30010,
             @errmsg = 'Cannot delete last Товар because Категория_товара exists.'
      GOTO ERROR
    END

    /* ERwin Builtin Trigger */
    /* Производитель  Товар on child delete no action */
    /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Производитель"
    CHILD_OWNER="", CHILD_TABLE="Товар"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_9", FK_COLUMNS="Код_производителя" */
    IF EXISTS (SELECT * FROM deleted,Производитель
      WHERE
        /* %JoinFKPK(deleted,Производитель," = "," AND") */
        deleted.Код_производителя = Производитель.Код_производителя AND
        NOT EXISTS (
          SELECT * FROM Товар
          WHERE
            /* %JoinFKPK(Товар,Производитель," = "," AND") */
            Товар.Код_производителя = Производитель.Код_производителя
        )
    )
    BEGIN
      SELECT @errno  = 30010,
             @errmsg = 'Cannot delete last Товар because Производитель exists.'
      GOTO ERROR
    END

    /* ERwin Builtin Trigger */
    /* Поставщик  Товар on child delete no action */
    /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Поставщик"
    CHILD_OWNER="", CHILD_TABLE="Товар"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_30", FK_COLUMNS="Код_поставщика" */
    IF EXISTS (SELECT * FROM deleted,Поставщик
      WHERE
        /* %JoinFKPK(deleted,Поставщик," = "," AND") */
        deleted.Код_поставщика = Поставщик.Код_поставщика AND
        NOT EXISTS (
          SELECT * FROM Товар
          WHERE
            /* %JoinFKPK(Товар,Поставщик," = "," AND") */
            Товар.Код_поставщика = Поставщик.Код_поставщика
        )
    )
    BEGIN
      SELECT @errno  = 30010,
             @errmsg = 'Cannot delete last Товар because Поставщик exists.'
      GOTO ERROR
    END

    /* ERwin Builtin Trigger */
    /* Грузоотправитель  Товар on child delete no action */
    /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Грузоотправитель"
    CHILD_OWNER="", CHILD_TABLE="Товар"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_32", FK_COLUMNS="Код_грузоотправителя" */
    IF EXISTS (SELECT * FROM deleted,Грузоотправитель
      WHERE
        /* %JoinFKPK(deleted,Грузоотправитель," = "," AND") */
        deleted.Код_грузоотправителя = Грузоотправитель.Код_грузоотправителя AND
        NOT EXISTS (
          SELECT * FROM Товар
          WHERE
            /* %JoinFKPK(Товар,Грузоотправитель," = "," AND") */
            Товар.Код_грузоотправителя = Грузоотправитель.Код_грузоотправителя
        )
    )
    BEGIN
      SELECT @errno  = 30010,
             @errmsg = 'Cannot delete last Товар because Грузоотправитель exists.'
      GOTO ERROR
    END


    /* ERwin Builtin Trigger */
    RETURN
ERROR:
    raiserror @errno @errmsg
    rollback transaction
END



+
[spoiler]
USE [db_comptech]
GO
/****** Object:  Trigger [dbo].[tU_Товар]    Script Date: 03/17/2012 09:37:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tU_Товар] ON [dbo].[Товар] FOR UPDATE AS
/* ERwin Builtin Trigger */
/* UPDATE trigger on Товар */
BEGIN
  DECLARE  @NUMROWS int,
           @nullcnt int,
           @validcnt int,
           @insКод_товара integer,
           @errno   int,
           @errmsg  varchar(255)

  SELECT @NUMROWS = @@rowcount
  /* ERwin Builtin Trigger */
  /* Товар  Продажи on parent update no action */
  /* ERWIN_RELATION:CHECKSUM="0009273d", PARENT_OWNER="", PARENT_TABLE="Товар"
    CHILD_OWNER="", CHILD_TABLE="Продажи"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_26", FK_COLUMNS="Код_товара" */
  IF
    /* %ParentPK(" OR",UPDATE) */
    UPDATE(Код_товара)
  BEGIN
    IF EXISTS (
      SELECT * FROM deleted,Продажи
      WHERE
        /*  %JoinFKPK(Продажи,deleted," = "," AND") */
        Продажи.Код_товара = deleted.Код_товара
    )
    BEGIN
      SELECT @errno  = 30005,
             @errmsg = 'Cannot update Товар because Продажи exists.'
      GOTO ERROR
    END
  END

  /* ERwin Builtin Trigger */
  /* Товар  Владелец on parent update no action */
  /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Товар"
    CHILD_OWNER="", CHILD_TABLE="Владелец"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_33", FK_COLUMNS="Код_товара" */
  IF
    /* %ParentPK(" OR",UPDATE) */
    UPDATE(Код_товара)
  BEGIN
    IF EXISTS (
      SELECT * FROM deleted,Владелец
      WHERE
        /*  %JoinFKPK(Владелец,deleted," = "," AND") */
        Владелец.Код_товара = deleted.Код_товара
    )
    BEGIN
      SELECT @errno  = 30005,
             @errmsg = 'Cannot update Товар because Владелец exists.'
      GOTO ERROR
    END
  END

  /* ERwin Builtin Trigger */
  /* Товар  Гарантийный_талон on parent update no action */
  /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Товар"
    CHILD_OWNER="", CHILD_TABLE="Гарантийный_талон"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_37", FK_COLUMNS="Код_товара" */
  IF
    /* %ParentPK(" OR",UPDATE) */
    UPDATE(Код_товара)
  BEGIN
    IF EXISTS (
      SELECT * FROM deleted,Гарантийный_талон
      WHERE
        /*  %JoinFKPK(Гарантийный_талон,deleted," = "," AND") */
        Гарантийный_талон.Код_товара = deleted.Код_товара
    )
    BEGIN
      SELECT @errno  = 30005,
             @errmsg = 'Cannot update Товар because Гарантийный_талон exists.'
      GOTO ERROR
    END
  END

  /* ERwin Builtin Trigger */
  /* Категория_товара  Товар on child update no action */
  /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Категория_товара"
    CHILD_OWNER="", CHILD_TABLE="Товар"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_8", FK_COLUMNS="Код_категории" */
  IF
    /* %ChildFK(" OR",UPDATE) */
    UPDATE(Код_категории)
  BEGIN
    SELECT @nullcnt = 0
    SELECT @validcnt = count(*)
      FROM inserted,Категория_товара
        WHERE
          /* %JoinFKPK(inserted,Категория_товара) */
          inserted.Код_категории = Категория_товара.Код_категории
    /* %NotnullFK(inserted," IS NULL","select @nullcnt = count(*) from inserted where"," AND") */
    select @nullcnt = count(*) from inserted where
      inserted.Код_категории IS NULL
    IF @validcnt + @nullcnt != @NUMROWS
    BEGIN
      SELECT @errno  = 30007,
             @errmsg = 'Cannot update Товар because Категория_товара does not exist.'
      GOTO ERROR
    END
  END

  /* ERwin Builtin Trigger */
  /* Производитель  Товар on child update no action */
  /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Производитель"
    CHILD_OWNER="", CHILD_TABLE="Товар"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_9", FK_COLUMNS="Код_производителя" */
  IF
    /* %ChildFK(" OR",UPDATE) */
    UPDATE(Код_производителя)
  BEGIN
    SELECT @nullcnt = 0
    SELECT @validcnt = count(*)
      FROM inserted,Производитель
        WHERE
          /* %JoinFKPK(inserted,Производитель) */
          inserted.Код_производителя = Производитель.Код_производителя
    /* %NotnullFK(inserted," IS NULL","select @nullcnt = count(*) from inserted where"," AND") */
    select @nullcnt = count(*) from inserted where
      inserted.Код_производителя IS NULL
    IF @validcnt + @nullcnt != @NUMROWS
    BEGIN
      SELECT @errno  = 30007,
             @errmsg = 'Cannot update Товар because Производитель does not exist.'
      GOTO ERROR
    END
  END

  /* ERwin Builtin Trigger */
  /* Поставщик  Товар on child update no action */
  /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Поставщик"
    CHILD_OWNER="", CHILD_TABLE="Товар"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_30", FK_COLUMNS="Код_поставщика" */
  IF
    /* %ChildFK(" OR",UPDATE) */
    UPDATE(Код_поставщика)
  BEGIN
    SELECT @nullcnt = 0
    SELECT @validcnt = count(*)
      FROM inserted,Поставщик
        WHERE
          /* %JoinFKPK(inserted,Поставщик) */
          inserted.Код_поставщика = Поставщик.Код_поставщика
    /* %NotnullFK(inserted," IS NULL","select @nullcnt = count(*) from inserted where"," AND") */
    select @nullcnt = count(*) from inserted where
      inserted.Код_поставщика IS NULL
    IF @validcnt + @nullcnt != @NUMROWS
    BEGIN
      SELECT @errno  = 30007,
             @errmsg = 'Cannot update Товар because Поставщик does not exist.'
      GOTO ERROR
    END
  END

  /* ERwin Builtin Trigger */
  /* Грузоотправитель  Товар on child update no action */
  /* ERWIN_RELATION:CHECKSUM="00000000", PARENT_OWNER="", PARENT_TABLE="Грузоотправитель"
    CHILD_OWNER="", CHILD_TABLE="Товар"
    P2C_VERB_PHRASE="", C2P_VERB_PHRASE="", 
    FK_CONSTRAINT="R_32", FK_COLUMNS="Код_грузоотправителя" */
  IF
    /* %ChildFK(" OR",UPDATE) */
    UPDATE(Код_грузоотправителя)
  BEGIN
    SELECT @nullcnt = 0
    SELECT @validcnt = count(*)
      FROM inserted,Грузоотправитель
        WHERE
          /* %JoinFKPK(inserted,Грузоотправитель) */
          inserted.Код_грузоотправителя = Грузоотправитель.Код_грузоотправителя
    /* %NotnullFK(inserted," IS NULL","select @nullcnt = count(*) from inserted where"," AND") */
    select @nullcnt = count(*) from inserted where
      inserted.Код_грузоотправителя IS NULL
    IF @validcnt + @nullcnt != @NUMROWS
    BEGIN
      SELECT @errno  = 30007,
             @errmsg = 'Cannot update Товар because Грузоотправитель does not exist.'
      GOTO ERROR
    END
  END


  /* ERwin Builtin Trigger */
  RETURN
ERROR:
    raiserror @errno @errmsg
    rollback transaction
END
17 мар 12, 04:40    [12265227]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
AndyD
Member

Откуда:
Сообщений: 30
Beat It,

Судя по этому
    IF EXISTS (SELECT * FROM deleted,Категория_товара
      WHERE
        /* %JoinFKPK(deleted,Категория_товара," = "," AND") */
        deleted.Код_категории = Категория_товара.Код_категории AND
        NOT EXISTS (
          SELECT * FROM Товар
          WHERE
            /* %JoinFKPK(Товар,Категория_товара," = "," AND") */
            Товар.Код_категории = Категория_товара.Код_категории
        )
    )
    BEGIN
      SELECT @errno  = 30010,
             @errmsg = 'Cannot delete last Товар because Категория_товара exists.'
      GOTO ERROR
    END

нельзя удалить товар, если после удаления не остается других товаров с этой категорией
Интересно, это так и задумывалось или ошибка генерации схемы?
17 мар 12, 09:09    [12265309]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Титунин Петр
Member

Откуда:
Сообщений: 25
Лень вникать в детали.
Но у тебя в сообщении и тригере одна и та-жа запись = типа "категория товара exist".

Суть явления. Если записи 2-х таблиц жестко связаны (индексами, тригерами), то удаление записи в 1 таблице - требует что-то предпринять с записями в другой (чаще удалить). В данном случае, судя по сообщению, тригер делает проверку и Вам отказывает.

(Например в институте есть Группы и студенты. Вы удаляете группу_3, а что делать с Ивановым из группы 3, не указываете)
17 мар 12, 09:11    [12265310]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
invm
Member

Откуда: Москва
Сообщений: 9826
Beat It, судя по приведенным данным, у вас используется и FK с каскадным удалением, и ссылочная целостность на триггерах, сгенерированная ERWIN'ом. Неплохо было бы выяснить у проектировщика БД задлянафига так сделано.

А проблема ваша из-за того, что в ERWIN'е кардинальность связи "Категория_товара -> Товар" установлена 1:P (если мне не изменяет склероз, то именно так там обозначается кардинальность 1:1 или более)
17 мар 12, 09:47    [12265343]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Beat It
Member

Откуда: СПБ
Сообщений: 11
invm
Beat It, судя по приведенным данным, у вас используется и FK с каскадным удалением, и ссылочная целостность на триггерах, сгенерированная ERWIN'ом. Неплохо было бы выяснить у проектировщика БД задлянафига так сделано.

А проблема ваша из-за того, что в ERWIN'е кардинальность связи "Категория_товара -> Товар" установлена 1:P (если мне не изменяет склероз, то именно так там обозначается кардинальность 1:1 или более)

да забыл сказать что использовался erwin.т.е предлогаете мне сменить тип связи?или что?
17 мар 12, 10:18    [12265355]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
qwerty112
Guest
Beat It
invm
Beat It, судя по приведенным данным, у вас используется и FK с каскадным удалением, и ссылочная целостность на триггерах, сгенерированная ERWIN'ом. Неплохо было бы выяснить у проектировщика БД задлянафига так сделано.

А проблема ваша из-за того, что в ERWIN'е кардинальность связи "Категория_товара -> Товар" установлена 1:P (если мне не изменяет склероз, то именно так там обозначается кардинальность 1:1 или более)

да забыл сказать что использовался erwin.т.е предлогаете мне сменить тип связи?или что?

тебе предлагают "всмотрется" в твой триггер, и подумать, задлянафига он вообще такой красивый нужен ?
откатывать удаление на стороне М, из-за того что есть запись на стороне 1 - это "верх цинизма"
пообщайся с архитектором БД, повыясняй - что он "этим хотел сказать" ?
17 мар 12, 10:33    [12265388]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
qwerty112
Guest
Титунин Петр
Лень вникать в детали.
Но у тебя в сообщении и тригере одна и та-жа запись = типа "категория товара exist".

Суть явления. Если записи 2-х таблиц жестко связаны (индексами, тригерами), то удаление записи в 1 таблице - требует что-то предпринять с записями в другой (чаще удалить). В данном случае, судя по сообщению, тригер делает проверку и Вам отказывает.

(Например в институте есть Группы и студенты. Вы удаляете группу_3, а что делать с Ивановым из группы 3, не указываете)

в том то и дело, что сдесь - с точностью наоборот
Иванова - нельзя отчислить (!), потому что, когда-то, кто-то внёс его в группу_3
17 мар 12, 10:35    [12265390]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Beat It
Member

Откуда: СПБ
Сообщений: 11
т.е тупо снести триггер? или связь должна была быть zero,one or more между категорией товара и товаром? сделать каскадное удаление на потомка?
проблема в том что с архитектором бд нет возможности общаться он того свалил в общем.
17 мар 12, 10:37    [12265398]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
invm
Member

Откуда: Москва
Сообщений: 9826
Beat It, ответьте себе на:
1. Зачем вообще использовался ERWIN, ради дела или ради красивых картинок?
2. Если для дела, то зачем кардинальность связи "Категория_товара -> Товар" установлена 1:P?
3. Если для дела, то зачем тогда в БД создавать FK, если ссылочная целостность будет контролироваться ервиновскими триггерами? Или в БД диаграмма со связями тоже рисовалась ради красивой картинки? Или вы не в курсе, что связь на диаграмме соответствует наличию FK между таблицами?

И тогда поймете почему невозможно удалить последний товар в категории.

ЗЫ: "Сильно не пинайте я зеленый еще совсем" не означает, что вам обязаны давать готовые решения.
17 мар 12, 10:43    [12265403]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
Beat It
Member

Откуда: СПБ
Сообщений: 11
invm
Beat It, ответьте себе на:
1. Зачем вообще использовался ERWIN, ради дела или ради красивых картинок?
2. Если для дела, то зачем кардинальность связи "Категория_товара -> Товар" установлена 1:P?
3. Если для дела, то зачем тогда в БД создавать FK, если ссылочная целостность будет контролироваться ервиновскими триггерами? Или в БД диаграмма со связями тоже рисовалась ради красивой картинки? Или вы не в курсе, что связь на диаграмме соответствует наличию FK между таблицами?

И тогда поймете почему невозможно удалить последний товар в категории.

ЗЫ: "Сильно не пинайте я зеленый еще совсем" не означает, что вам обязаны давать готовые решения.

эрвин использовался для дела.но я так понимаю никого до меня это не парило какая там связь.я кстати пробывал другие связи один хрен.триггеры эти генерирует эрвин.я просто просил объяснить что не так,и какая связь тут должна быть с более правильной точки зрения.
17 мар 12, 10:48    [12265415]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
invm
Member

Откуда: Москва
Сообщений: 9826
Beat It
эрвин использовался для дела
Сильно сомневаюсь.
Beat It
но я так понимаю никого до меня это не парило какая там связь.я кстати пробывал другие связи один хрен.триггеры эти генерирует эрвин
Проблемы использования эрвина не относятся к тематике форума.
Beat It
я просто просил объяснить что не так,и какая связь тут должна быть с более правильной точки зрения.
"Более правильная точка зрения" не может быть сформулирована без знания предметной области.
17 мар 12, 10:59    [12265426]     Ответить | Цитировать Сообщить модератору
 Re: Что делать?Нужен совет  [new]
qwerty112
Guest
Beat It
...
я просто просил объяснить что не так,и какая связь тут должна быть с более правильной точки зрения.

в твоём трригере, только часть с проверкой связи удаляелого товара с таб.Продажи - имеет какой-то "вменяемый" смысл
...
    IF EXISTS (
      SELECT * FROM deleted,Продажи
...

всё остальное - "чиста наркоманИя"

но и для этой связи, контроль целостности делать в трригере - излишне
достаточно было НЕ установливать каскадного удаления/обновления
17 мар 12, 10:59    [12265429]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить