更新が実行されるたびに別のテーブルを更新する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
(このMS SQL Serverのですか?) 'SELECT'がになっていることは何ですか'update'の後に行うのですか? – Mat
@MAT:ユーザーが更新用の行セットとして使用しようとしていたと仮定しています。 –
UPDATE/SELECTコンボが奇妙に見えます。私はUPDATEの後に ';'を、SELECTを全くしないことを期待しています。私はT-SQLプログラマではありませんが、PL/SQLでは、列名の前に 'new.'を追加することで新しい値を指定します。 –