我需要在sql中创建一个触发器,用于检查用户是否已回答有关特定应用程序的实际注册到该应用程序的问题。
我正在使用的表格是:
1) tblAnsweredOn ,其中包含以下列:
电子邮件(密钥),appName(密钥),questionNo(密钥),答案,answerDate
2) tblRegisteredTo ,其中包含以下列:
电子邮件(密钥),appName(密钥),registrationDate,nickName
这是我尝试的代码,但不允许我插入任何用户,无论他是否试图回答与他注册的应用程序相关的问题。
create trigger ifExistsTrigger
on [dbo].[tblAnsweredOn] after insert as
declare
@email nvarchar,
@appName nvarchar
select @email = INSERTED.email , @appName = INSERTED.AppName
from INSERTED
if not exists (select email, appName
from [dbo].[tblRegisteredTo]
where email = @email
and appName = @appName)
rollback;
答案 0 :(得分:2)
您可能无法获得预期的结果,因为您将inserted
伪表视为标量而不是表。您只需加入inserted
和tblRegisteredTo
即可获得结果。
IF EXISTS (
SELECT email, appName
FROM inserted A
LEFT JOIN dbo.tblRegisteredTo B
ON A.email = B.email AND A.appName = B.appName
WHERE B.appName IS NULL OR B.email IS NULL)
ROLLBACK