2016-01-14 2 views
0

Мне нужен триггер, который запускается при обновлении определенного столбца в таблице и обновляет другие столбцы, используя данные из двух других таблиц.Поиск данных в одной таблице и обновление еще

Таблица 1 называется STOCK_ITEMS

Соответствующие столбцы являются все внешние ключи

  • Колонка STOCKGROUP является FK для таблицы STOCK_GROUPS
  • Колонка STOCKGROUP2 является ФК по таблице STOCK_GROUP2S
  • Колонка X_STOCK_GROUP3 является ФК для X_STOCK_GROUP3S

В таблице X_STOCK_GROUP3S содержатся FK других двух таблиц групп акций. Идея заключается в том, чтобы сделать первые два столбца зависит от третьего, так что если значение X_STOCK_GROUP3 изменений, этот триггер будет устанавливать значения STOCKGROUP и STOCKGROUP2, используя данные из X_STOCK_GROUP3S

Я попытался это:

CREATE TRIGGER STOCKGROUP 
ON [dbo].[STOCK_ITEMS] 
FOR UPDATE 
AS 
    IF UPDATE (X_STOCK_GROUP3) 
     set STOCKGROUP = STOCK_GROUPS.GROUPNO 

    PRINT 'AFTER UPDATE Trigger fired.' 
GO 

Не работает. Это не нравится мой знак «=». Или есть что-то еще, что мне не хватает (вероятно !!)

Любая помощь приветствуется.

ответ

0

ОК, так что здесь является окончательным и успешным, результат:

Престижность кредит: Сонни Dhaliwal - Поддержка Консультант - Enprise Solutions. Спасибо Сонни.

USE [MyDataBase] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE TRIGGER [dbo].[X_SET_STOCK_GROUPS] 
ON [dbo].[STOCK_ITEMS] 
FOR UPDATE 
AS 
DECLARE @STOCKCODE VARCHAR(100), 
     @STOCKGROUP3 INTEGER, 
     @STOCKGROUP1 INTEGER, 
     @STOCKGROUP2 INTEGER 
BEGIN 

    SELECT @STOCKCODE = STOCKCODE FROM inserted 
    SELECT @STOCKGROUP3 = X_STOCK_GROUP3 FROM inserted 
    SELECT @STOCKGROUP1 = (SELECT SECONDARY_GROUP FROM X_STOCK_GROUP3S 
     WHERE SEQNO = @STOCKGROUP3) 
    SELECT @STOCKGROUP2 = (SELECT PRIMARY_GROUP FROM X_STOCK_GROUP3S 
     WHERE SEQNO = @STOCKGROUP3) 


    BEGIN 
     UPDATE STOCK_ITEMS 
     SET STOCKGROUP = @STOCKGROUP1, STOCKGROUP2 = @STOCKGROUP2 
     WHERE STOCKCODE = @STOCKCODE 
    END 
END 
GO 
1

Не знаю, понимаю ли я, что вы хотите делать. X_STOCK_GROUP3S содержит некоторые записи, как (ID, STOCKGROUP, STOCKGROUP2)
(21,1000,300)
(22,2000,200)
(23,3000,100)

и STOCK_ITEMS содержит записи, такие как (ID, ..., STOCKGROUP, STOCKGROUP2, X_STOCK_GROUP3)

Если X_STOCK_GROUP3 таблицы STOCK_ITEMS обновляется до 21 вы хотите установить значения STOCKGROUP 1000 и STOCKGROUP2 300.

является ли это то, что вы хотите сопровождать лиш? Затем в вашем коде отсутствуют некоторые критерии выбора. Я хотел бы попробовать что-то вроде этого

CREATE TRIGGER STOCKGROUP 
ON [dbo].[STOCK_ITEMS] 
FOR UPDATE 
AS 
    SET NOCOUNT ON; 
    IF UPDATE (X_STOCK_GROUP3) 
    UPDATE STOCK_ITEMS SET STOCKGROUP = (
     SELECT STOCKGROUP FROM X_STOCK_GROUP3S 
     WHERE STOCK_ITEMS.X_STOCK_GROUP3 = X_STOCK_GROUP3S.ID 
    ), 
    STOCKGROUP2 = (
     SELECT STOCKGROUP2 FROM X_STOCK_GROUP3S 
     WHERE STOCK_ITEMS.X_STOCK_GROUP3 = X_STOCK_GROUP3S.ID 
    ) 
    WHERE ID IN (SELECT ID FROM deleted); 
GO 
+0

ОК, спасибо Морти. Я закончил тем, что заплатил администратору баз данных, чтобы построить мне триггер, код ниже для всех, кто приходит на эту должность, ища помощи. – Bevan