4

名前「ジョン」がテーブルに何も挿入できないようにする「挿入トリガーの代わりに」を作成しようとしています。私の問題は、名前を別の名前に変更しても、クエリは成功しますが、値が追加されないことです。

事前に感謝します。

CREATE TRIGGER InsteadOfTrigger
ON Question4
INSTEAD OF INSERT
AS  
Declare @name varchar(50)
Declare @question varchar(50)
Declare @Answer char
Set @name = 'John'
IF (select Username from inserted) = @name
BEGIN
RAISERROR ('You have not paid up your fee', 10,1)
ROLLBACK TRANSACTION
END
ELSE
BEGIN
INSERT INTO question4
values (@name, @question, @Answer)
END
4

2 に答える 2

4

わかりましたので、ステートメントの間のBEGINandステートメントを削除し、トリガーロジックをENDIF ELSEBEGIN END

以下のコメントで述べたように、必要はありませんROLLBACK TRANSACTION

また、@question と @Answer を使用できるように入力する必要があります。

CREATE TRIGGER InsteadOfTrigger
ON Question4
INSTEAD OF INSERT
AS 
BEGIN

Declare @name varchar(50)
Declare @question varchar(50)
Declare @Answer char

Set @name = 'John'

IF (select Username from inserted) = @name
    RAISERROR ('You have not paid up your fee', 10,1)
    --ROLLBACK TRANSACTION
ELSE
    INSERT INTO question4
    values (@name, @question, @Answer)

END
于 2013-09-12T12:24:31.417 に答える
2

うーん、あなたが宣言したことに気付きましたが、else ステートメントで変数の値を実際に設定していないため、SQL が期待どおりに挿入されなかった可能性があります。奇妙なことに、現時点では課題で同じことをする必要があります。これが私の解決策です:

CREATE TRIGGER instead_of_insert
ON Question4

INSTEAD OF INSERT AS

Declare @Username varchar(25) 
Declare @Question varchar(6)
Declare @Answer char(1)

Set @Username ='John'

IF (Select UserName from inserted) = @UserName
Begin
RAISERROR ('You have not paid up your fee', 10,1)
End

Else
Begin

Set @Username = (Select UserName from inserted)
Set @Question = (Select Question_ID from inserted)
Set @Answer = (Select Answer from inserted)

Insert into User_Responses 
Values
(@username, @Question, @Answer) 

End
于 2014-09-01T04:57:04.150 に答える