SQl триггер после выпуска вставки - PullRequest
1 голос
/ 25 октября 2011

Я работаю над триггерами, используя SQL Server 2005. У меня есть триггер для таблицы, которая после обновления. После объявления переменных код выглядит следующим образом.

if @isconfirmed_before = 0 and @isconfirmed_after = 1
begin

if @invite_userid <> ''
        begin

            select @points = points from dbo.InvitePoint where code = 'USR' and packageid = @packageid
            INSERT INTO InviteCount
                   ([userID]
                   ,[joinMerchantID]
                   ,[packageID]
                   ,[points]
                   ,[joinDate])
             VALUES
                   (@invite_userid
                   ,@merchantid
                   ,@packageid
                   ,@points
                   ,getdate())
        end

 SET @alpha_numeric=''
        SELECT @alpha_numeric=@alpha_numeric+CHAR(n) FROM
        (
            SELECT TOP 8 number AS n FROM master..spt_values
            WHERE TYPE='p' and (number between 48 and 57 or number between 65 and 90)
            ORDER BY NEWID()
        ) AS t 

        update merchant
        set reg_code = @alpha_numeric
        where merchantid = @merchantid

END

Последняя часть

    update merchant  
    set reg_code = @alpha_numeric
    where merchantid = @merchantid

Этот reg_code должен быть вставлен только один раз при вставке строки, но он меняется каждый раз, когда происходит обновление таблицы. Как мне это сделать? Пожалуйста, помогите мне, спасибо заранее !!

Ответы [ 2 ]

0 голосов
/ 25 октября 2011

ОК, у вас очень много проблем с триггерами. Сначала вам нужно показать фактический код создания триггера. Я подозреваю, что вы не правильно установили, чтобы стреляли только при вставке.

Далее необходимо предположить, что триггер должен обрабатывать несколько вставок записей. Каждый раз, когда вы устанавливаете значение для скалярной переменной в триггере, вы, вероятно, делаете что-то не так. Это не может быть и весь ваш триггер, потому что вы не показали, как вы получаете переменные значения.

0 голосов
/ 25 октября 2011
update merchant   
set reg_code = @alpha_numeric 
where merchantid = @merchantid 

Этот код выполняется каждый раз, когда происходит обновление, потому что у вас нет условного потока, препятствующего его иногда выполнять.Если вы хотите выполнить только данное условие, вам нужно обернуть его в блок IF.

Вы говорите: «Этот код reg_code вставляется только один раз, когда вставляется строка, но онаменяется каждый раз, когда происходит обновление таблицы. "Почему это в AFTER UPDATE триггере тогда?Похоже, это должно быть в AFTER INSERT триггере.Если я не понимаю вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...