我收到这些错误:
<块引用>消息 156,级别 15,状态 1,第 37 行
关键字“TRIGGER”附近的语法不正确。
消息 140,级别 15,状态 1,第 44 行
只能在 CREATE TRIGGER 语句中使用 IF UPDATE。
我不明白我在做什么,在这里创建触发器的代码在 IF 语句之外运行良好,但是一旦我将它放入语句中,我就无法运行它。是否有一些我搞砸的语法或类似的东西?当我将鼠标悬停在列上时,我收到一条消息,显示无效的列名,这对我来说没有意义,因为在没有 IF 语句的情况下,我的代码运行良好。
USE [Elearn2]
GO
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'AspNetUserEmailAudit')
AND type IN (N'U'))
BEGIN
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
CREATE TABLE [dbo].[AspNetUserEmailAudit]
(
[AuditId] [uniqueidentifier] NOT NULL,
[AuditDate] [datetime] NOT NULL,
[UserId] [uniqueidentifier] NOT NULL,
[UserName] [nvarchar](256) NULL,
[Email] [nvarchar](256) NULL,
[NormalizedEmail] [nvarchar](256) NULL,
[FirstName] [nvarchar](max) NULL,
[LastName] [nvarchar](max) NULL,
CONSTRAINT [PK_AspNetUserEmailAudit]
PRIMARY KEY CLUSTERED ([AuditId] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
ALTER TABLE [dbo].[AspNetUserEmailAudit]
ADD DEFAULT (NEWID()) FOR [AuditId]
ALTER TABLE [dbo].[AspNetUserEmailAudit]
ADD DEFAULT (GETDATE()) FOR [AuditDate]
END
IF NOT EXISTS (SELECT * FROM sys.triggers WHERE name = 'MyTrigger')
BEGIN
CREATE TRIGGER AspNetUsersEmail_trigger
ON AspNetUsers
AFTER UPDATE
AS
****Error starts***
SET NOCOUNT ON;
IF (UPDATE(Email))
INSERT INTO [dbo].[AspNetUserEmailAudit]
(UserId, UserName, Email, NormalizedEmail, FirstName, LastName)
SELECT Id, UserName, Email, NormalizedEmail, FirstName, LastName
FROM inserted i
WHERE EXISTS (SELECT i.Id, i.Email
EXCEPT
SELECT d.Id, d.Email
FROM deleted d);
*****
END
GO
IF NOT EXISTS (SELECT * FROM [dbo].[AspNetRoles]
WHERE [NormalizedName] = 'SUPERADMIN')
BEGIN
INSERT INTO [dbo].[AspNetRoles] ([Id], [Name], [NormalizedName], [ConcurrencyStamp])
VALUES (NEWID(), 'SuperAdmin', 'SUPERADMIN', NULL)
END
DECLARE @userrole nvarchar(256)
SET @userrole = (SELECT [RoleId]
FROM [Elearn2].[dbo].[AspNetUserRoles]
WHERE [UserId] = 'E96380FB-1823-453C-9436-08D92532AE7D')
PRINT @userrole
DECLARE @user nvarchar(256)
SET @user = (SELECT [Id] FROM [Elearn2].[dbo].[AspNetUsers]
WHERE [UserName] = 'super')
PRINT @user
UPDATE [Elearn2].[dbo].[AspNetUserRoles]
SET [RoleId] = @userrole
WHERE [UserId] = @user