Sql SSDT在无任何更改时重新更改触发器

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

我正在使用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 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符号。另一件要尝试的事情是进行数据库比较,并尝试将此触发器从数据库更新到项目。