Sql SSDT在无任何更改时重新更改触发器
我正在使用SSDT数据库项目为我的数据库创建部署脚本。 每次部署运行时,[trddl_GrantUserRights]都是一个触发器。 项目文件中触发器的定义没有任何更改。 触发器的定义:Sql SSDT在无任何更改时重新更改触发器,sql,sql-server,database,sql-server-data-tools,sqlpackage,Sql,Sql Server,Database,Sql Server Data Tools,Sqlpackage,我正在使用SSDT数据库项目为我的数据库创建部署脚本。 每次部署运行时,[trddl_GrantUserRights]都是一个触发器。 项目文件中触发器的定义没有任何更改。 触发器的定义: ALTER trigger [trddl_GrantUserRights] ON DATABASE WITH EXECUTE AS 'dbo' FOR DDL_DATABASE_LEVEL_EVENTS AS BEGIN SET NOCOUNT ON; DECLARE @Cmd va
ALTER trigger [trddl_GrantUserRights] ON DATABASE
WITH EXECUTE AS 'dbo'
FOR DDL_DATABASE_LEVEL_EVENTS
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Cmd varchar(250)
/* InterfaceDeveloperUsers ve InterfaceDeveloperUsers rolleri db_datareader ve db_datawriter rollerini kapsadığından bu bölüme gerek kalmamıştır.
IF EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)')='CREATE_TABLE'
OR EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)')='CREATE_VIEW'
BEGIN
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'InterfaceAnalistUsers' AND type = 'R')
BEGIN
SET @Cmd = 'GRANT SELECT,VIEW DEFINITION ON [' + EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '].[' + EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '] TO [InterfaceAnalistUsers]'
EXEC (@Cmd)
END
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'InterfaceDeveloperUsers' AND type = 'R')
BEGIN
SET @Cmd = 'GRANT SELECT,UPDATE,DELETE,INSERT,VIEW DEFINITION ON [' + EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '].[' + EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '] TO [InterfaceDeveloperUsers]'
EXEC (@Cmd)
END
END
*/
IF EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)')='CREATE_PROCEDURE'
BEGIN
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'InterfaceAnalistUsers' AND type = 'R')
BEGIN
SET @Cmd = 'GRANT VIEW DEFINITION ON [' + EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '].[' + EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '] TO [InterfaceAnalistUsers]'
EXEC (@Cmd)
END
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'InterfaceDeveloperUsers' AND type = 'R')
BEGIN
SET @Cmd = 'GRANT EXECUTE,VIEW DEFINITION ON [' + EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '].[' + EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '] TO [InterfaceDeveloperUsers]'
EXEC (@Cmd)
END
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'PusulaUser' AND type = 'S')
BEGIN
SET @Cmd = 'GRANT EXECUTE ON [' + EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '].[' + EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '] TO [PusulaUser]'
EXEC (@Cmd)
END
END
IF EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)')='CREATE_FUNCTION'
BEGIN
IF EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]','nvarchar(100)')='TF'
BEGIN
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'InterfaceAnalistUsers' AND type = 'R')
BEGIN
SET @Cmd = 'GRANT SELECT,VIEW DEFINITION ON [' + EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '].[' + EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '] TO [InterfaceAnalistUsers]'
EXEC (@Cmd)
END
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'InterfaceDeveloperUsers' AND type = 'R')
BEGIN
SET @Cmd = 'GRANT SELECT,VIEW DEFINITION ON [' + EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '].[' + EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '] TO [InterfaceDeveloperUsers]'
EXEC (@Cmd)
END
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'PusulaUser' AND type = 'S')
BEGIN
SET @Cmd = 'GRANT SELECT ON [' + EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '].[' + EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '] TO [PusulaUser]'
EXEC (@Cmd)
END
END
IF EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]','nvarchar(100)')='FN'
BEGIN
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'InterfaceAnalistUsers' AND type = 'R')
BEGIN
SET @Cmd = 'GRANT VIEW DEFINITION ON [' + EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '].[' + EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '] TO [InterfaceAnalistUsers]'
EXEC (@Cmd)
END
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'InterfaceDeveloperUsers' AND type = 'R')
BEGIN
SET @Cmd = 'GRANT EXECUTE,VIEW DEFINITION ON [' + EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '].[' + EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '] TO [InterfaceDeveloperUsers]'
EXEC (@Cmd)
END
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'PusulaUser' AND type = 'S')
BEGIN
SET @Cmd = 'GRANT EXECUTE ON [' + EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + '].[' + EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(100)') + '] TO [PusulaUser]'
EXEC (@Cmd)
END
END
END
IF EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(100)')='CREATE_SCHEMA'
BEGIN
IF EXISTS (SELECT * FROM sys.database_principals WHERE name = N'InterfaceDeveloperUsers' AND type = 'R')
BEGIN
SET @Cmd = 'GRANT ALTER ON SCHEMA::' + EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(100)') + ' TO [InterfaceDeveloperUsers]'
EXEC (@Cmd)
END
END
END;
你的问题是什么?我不希望它在脚本文件中连续出现如果你不考虑差异,触发器的更改脚本将始终包含在脚本中。注释和空格的差异也很重要。在数据库和项目文件之间使用
Schema Compare
查看差异。首先,确保代码中没有任何非unicode符号。另一件要尝试的事情是进行数据库比较,并尝试将此触发器从数据库更新到项目。您的问题是什么?我不希望它在脚本文件中持续出现如果您不考虑差异,触发器的更改脚本将始终包含在脚本中。注释和空格的差异也很重要。在数据库和项目文件之间使用Schema Compare
查看差异。首先,确保代码中没有任何非unicode符号。另一件要尝试的事情是进行数据库比较,并尝试将此触发器从数据库更新到项目。