0

このトリガーを以下に書きました。でエラーが発生していCOUNT(*) Fromます。このトリガーを使用してテーブル「ユーザー」に行が挿入されたときに、現在割り当てに存在するフォルダーをユーザーに割り当てる必要があります。ここに画像の説明を入力

例: テーブルに新しい行を追加したとしUsersますuserD。次に、このトリガーの助けを借りて、現在のフォルダーなどは、デフォルトでフォルダーfolderA, folderB, folderCに割り当てる必要があります。このトリガーを以下に記述しましたが、givig Error atuserDVisibleCount(*) From

CREATE TRIGGER Trigger_Insert ON Users
FOR INSERT
AS
    declare @userid int;
    declare @username nvarchar(50);
    declare @useremail nvarchar(50);
    declare @userpassword nvarchar(50);

    select @userid=i.user_id from inserted i;   
    select @username=i.user_name from inserted i;   
    select @useremail=i.user_email from inserted i; 
    select @userpassword=i.user_password from inserted i;
    DECLARE @intFlag INT
    SET @intFlag =1
    WHILE (@intFlag <=COUNT(*) FROM Assignments;)  // Error Here
    BEGIN
       insert into UAssignment_Rights(
       ua_rights_id,ua_rights_name,assignment_id,user_id) 
       values(@userid,'Visible','','');
       SET @intFlag = @intFlag + 1
       PRINT 'AFTER INSERT trigger fired.'
    END 
GO

この問題を解決するのを手伝ってくれませんか。

4

2 に答える 2

2

COUNT(*)SELECTorHAVINGステートメントの一部としてのみ使用する必要があります。集計関数の詳細については、MSDN を参照してください

Assignmentsループの一部として変更されない場合はWHILE、置き換えてみてください...

WHILE (@intFlag <=COUNT(*) FROM Assignments;)  // Error Here

と...

DECLARE @AssignmentsCount INT
SELECT @AssignmentsCount = COUNT(*) FROM Assignments
WHILE @intFlag <= @AssignmentsCount

これは、COUNT(*)が 1 回だけ実行されることを意味します。

ただし、ループ中に の数Assignments 変わる可能性がある場合は、次のように置き換えます...

WHILE @intFlag <= (SELECT COUNT(*) FROM Assignments)
于 2013-08-29T13:06:10.770 に答える