SQL триггер выполнить обновление при обновлении - PullRequest
2 голосов
/ 04 января 2012

Я пытаюсь написать SQL-триггер, который обновит другую таблицу при каждом выполнении обновления.Это фактически используется для замены репликации (репликация существует в нашей производственной среде, но не в среде dev, поскольку это вызывает проблемы в dev).Я написал следующий триггер для достижения этой цели, но, похоже, он не работает, и я понятия не имею, почему.(Также я понятия не имею, как отлаживать триггеры)

USE [AuditQuestionnaireManagerDemo]
GO
/****** Object:  Trigger [dbo].[CatchUpdateUser]    Script Date: 01/04/2012 09:25:40 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [dbo].[CatchUpdateUser]
   ON  [dbo].[User]
   FOR UPDATE
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    update SharedServicesDemo.dbo.[User]
        set SharedServicesDemo.dbo.[User].Username = Username,
            SharedServicesDemo.dbo.[User].PasswordHash = PasswordHash,
            SharedServicesDemo.dbo.[User].Salt = Salt,
            SharedServicesDemo.dbo.[User].PersonGUID = PersonGUID,
            SharedServicesDemo.dbo.[User].OrganizationGUID = OrganizationGUID,
            SharedServicesDemo.dbo.[User].IsDeleted = IsDeleted,
            SharedServicesDemo.dbo.[User].IsActive = IsActive
        where SharedServicesDemo.dbo.[User].GUID = GUID
    SELECT GUID, ID, Username, PasswordHash, Salt, PersonGuid, OrganizationGUID, IsDeleted, IsActive From Inserted

END

Было бы замечательно, если бы кто-то мог обнаружить проблему здесь!

Этот триггер вставки работал с комбо вставки / выбора:

SET IDENTITY_INSERT SharedServicesDemo.dbo.[User] ON
INSERT INTO SharedServicesDemo.dbo.[User] (GUID, ID, Username, PasswordHash, Salt, PersonGUID, OrganizationGUID, IsDeleted, IsActive)
SELECT GUID, ID, Username, PasswordHash, Salt, PersonGuid, OrganizationGUID, IsDeleted, IsActive From Inserted
SET IDENTITY_INSERT SharedServicesDemo.dbo.[User] OFF

1 Ответ

2 голосов
/ 04 января 2012

Ваш триггер в настоящее время ничего не делает (вам повезло (не повезло?) В том, что синтаксис компилируется, но не выполняет то, что вы намеревались).Попробуйте:

update SharedServicesDemo.dbo.[User] 
set  SharedServicesDemo.dbo.[User].Username = i.Username,
    SharedServicesDemo.dbo.[User].PasswordHash = i.PasswordHash,
    SharedServicesDemo.dbo.[User].Salt = i.Salt,
    SharedServicesDemo.dbo.[User].PersonGUID = i.PersonGUID,
    SharedServicesDemo.dbo.[User].OrganizationGUID = i.OrganizationGUID,
    SharedServicesDemo.dbo.[User].IsDeleted = i.IsDeleted,
    SharedServicesDemo.dbo.[User].IsActive = i.IsActive
From  SharedServicesDemo.dbo.[User]
inner join inserted i ON SharedServicesDemo.dbo.[User].GUID = i.GUID

Ссылка: ОБНОВЛЕНИЕ

[Может потребоваться псевдоним второго экземпляра SharedServicesDemo.dbo.[User] ...]

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