2012-01-04 17 views
2

更新が実行されるたびに別のテーブルを更新するSQLトリガを作成しようとしています。これは実際にレプリケーションを置き換えるために使用されます(レプリケーションは本番環境ではなく、dev環境では問題が発生するためdev環境に存在します)。 これを達成するために次のトリガーを書いていますが、うまくいかないと思われます。理由はわかりません。 (また、私はトリガーをデバッグする方法がわかりません)sql triggerは更新時に更新を実行します

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 
+0

(このMS SQL Serverのですか?) 'SELECT'がになっていることは何ですか'update'の後に行うのですか? – Mat

+0

@MAT:ユーザーが更新用の行セットとして使用しようとしていたと仮定しています。 –

+0

UPDATE/SELECTコンボが奇妙に見えます。私はUPDATEの後に ';'を、SELECTを全くしないことを期待しています。私はT-SQLプログラマではありませんが、PL/SQLでは、列名の前に 'new.'を追加することで新しい値を指定します。 –

答えて

2

この挿入トリガーは、挿入/選択コンボと仕事をしました。試してみてください:

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 

のRef .: UPDATE

[SharedServicesDemo.dbo.[User]の2番目のインスタンスをエイリアスする必要があるかもしれません...]

+0

カラム名を変更する必要がありました.Inserted.Usernameなどのように、あいまいではなく魅力的に機能するようにするいいえw。最初の投稿に追加した挿入トリガーのように機能しない理由を説明できますか? – laureysruben

+0

私が説明したように、あなたは構文が間違っていたが、コンパイルして何もしなかった。 –

関連する問題