0

テーブルに挿入が行われたときにトリガーを使用したいのですが、エラーのために作成できません。

   -- ================================================
-- Template generated from Template Explorer using:
-- Create Trigger (New Menu).SQL
--
-- Use the Specify Values for Template Parameters 
-- command (Ctrl-Shift-M) to fill in the parameter 
-- values below.
--
-- See additional Create Trigger templates for more
-- examples of different Trigger statements.
--
-- This block of comments will not be included in
-- the definition of the function.
-- ================================================
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      Nick Gowdy
-- Create date: 26/03/2013
-- Description: Insert Module ID into table based on User ID on update
-- =============================================
CREATE TRIGGER TblAuditLogLoggingIn.ModuleID ON dbo.GenesisOnline.TblAuditLogLoggingIn.UserID
AFTER INSERT
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for trigger here

END
GO

エラーは次のとおりです。

メッセージ 8197、レベル 16、状態 4、手順 ModuleID、行 6 オブジェクト 'TblAuditLogLoggingIn.UserID' が存在しないか、この操作に対して無効です。

スキーマは dbo.GenesisOnline.TblAuditLogLoggingIn で、列は次のとおりです。

  • 監査 ID PK
  • ユーザーID
  • モジュールID
  • ログイン日

作成しようとしているトリガーは、作成したテーブル TblAuditLogLoggingIn 用です。しかし、管理スタジオはそれが存在しないと言いますか?

4

1 に答える 1

2

わかりました、質問@nick gowdyを明確にしていただきありがとうございます。まず、SQL Server はドット (.)を含む名前を受け入れません。前の回答で述べたように、列に基づいてトリガーを作成することはできません。トリガーの列を操作する場合は、次のようにする必要があります。

CREATE TRIGGER TblAuditLogLoggingIn_ModuleID ON dbo.GenesisOnline
AFTER INSERT
AS 
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for trigger here
    IF ( UPDATE(UserID) )
    BEGIN
        -- do your stuff here
    END
END
GO

しかし、それはほぼ確実にdo your stuff here常に実行されます。あなたがやろうとしていることが、いくつかの基準を満たすことであるdo your stuff場合UserID、たとえば null の場合、次のようなことができます:

DECLARE @UserID int --assuming that is the type of your UserID
SELECT @UserID = UserID from inserted
IF ( @UserID is null ) -- change this to a criteria appropriate to your code
BEGIN
    -- do your stuff here
END
于 2013-03-26T11:46:43.583 に答える