0

У меня возникла проблема с моим триггером: он не распознает мою таблицу, в которой хранится вычисляемый столбец, в котором мне нужны данные.Как использовать вычисленный столбец в if/else

Моя таблица выглядит следующим образом и состоит из нескольких вычисляемых столбцов: my table

Моя проблема с колонкой In_Months, часть моего триггера выглядит следующим образом:

CREATE TRIGGER [Balance_monthly] 
ON [dbo].[Balance] 
FOR INSERT, UPDATE 
AS 
BEGIN 
    DECLARE @test int; 
    DECLARE @amount int; 
    SET NOCOUNT ON 

    IF Balance.In_Months % 12 = 0 
     SET @amount = 3; 

Это не позволяет меня обновить мой триггер, потому что он не может найти мою таблицу.

+1

Триггеры SQL Server запускаются один раз для каждого оператора, поэтому вам нужно ссылаться на таблицы «вставленные» и/или «удаленные», чтобы получить доступ к измененным данным, и вам нужно понять, что эти таблицы могут содержать * несколько строк. –

+2

Как правило, вы пишете один или несколько запросов на основе набора, которые достигают целей вашего триггера, справляясь с, например, 'вставленный' может содержать 4 строки, из которых 2 имеют значение« Balance.In_Months% 12 = 0' и 2 из которых нет. Однако вы не сказали нам, какова общая цель этого триггера, поэтому я не могу предложить какой-либо конкретный код на данный момент. –

+0

чего вы пытаетесь достичь? Есть ли столбец количества, который должен быть установлен равным 3, когда In_Month равен 12,24,36? –

ответ

1

Это направить вас в правильном направлении. Это не дает полезного ответа, просто действительный ответ. Он просто демонстрирует, как работают триггеры.

Кажется, вы хотите оценить некоторые вставленные данные. Однако более 1 строки могут быть вставлены или обновлены.

Создание тестовой таблицы:

CREATE table balance(in_months int) 

Создание триггера. Я выборе 3 для каждой строки, где In_Months можно разделить на 12

CREATE TRIGGER [Balance_monthly] 
ON [dbo].[Balance] 
FOR INSERT, UPDATE 
AS 
BEGIN 
    DECLARE @amount int; 
    SET NOCOUNT ON 

    SELECT @amount= sum(case when INSERTED.In_Months % 12 = 0 then 3 else 0 end) 
    FROM INSERTED 
    SELECT @amount 
END 

Вставка в таблицу на активный триггер:

INSERT balance(In_Months) values(12),(13),(24) 

Результат 6 (3 * 2), так как 2 вставленный значения (12 и 24) можно разделить на 12

+0

. SELECT @ amount = sum (случай, когда INSERTED.In_Months% 12 = 0, тогда 3 else 0 end) FROM INSERTED был именно тем, что я искал – Bungicasse

+0

Я исправлю это, в любом случае, спасибо за решение моей проблемы. – Bungicasse

-1

использование изменить

ALTER TRIGGER [Balance_monthly] ON [dbo].[Balance] 
FOR INSERT, UPDATE 
AS 
BEGIN 
DECLARE @test int; 
DECLARE @amount int; 
SET NOCOUNT ON 

IF In_Months % 12 = 0 
    SET @amount = 3; 
+0

Я боюсь, что это утверждение не признано в этом контексте. – Bungicasse

+0

Я думал, что вы хотите обновить триггер ... – Saravanakumar

+0

Да, но это не позволит мне обновлять, потому что он не может найти мою таблицу. – Bungicasse

 Смежные вопросы

  • Нет связанных вопросов^_^