小编Wil*_*llG的帖子

仅在进行实际更改时触发的 T-SQL 触发器如何?

在 UPDATE 和 INSERT 上有一个表触发器,可以将一行添加到另一个表中。如果四列中的一列发生更改,则只需添加一行。我尝试使用 IF UPDATE(col) 来测试更改,但它有一个盲点。它只测试一些值进来了。我需要更深入,我需要比较旧值和新值以查看是否发生了真正的变化。它必须与 INSERT 和 UPDATE 一起使用。

在 UPDATE 的情况下,这很容易,因为插入和删除的表都有我可以在触发器内进行比较的值。但是,对于 INSERT,只有插入表才有值。因为我在同一个触发器中需要所有这些,我该如何处理 INSERT 案例?

这是我要修改的触发器的脚本:

ALTER TRIGGER [dbo].[trATPerson_alter] 
   ON  [mydb].[dbo].[AT_Person]
   AFTER INSERT,UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    -- Not all updates require a push
    IF (UPDATE([First_Name]) OR UPDATE([Last_Name]) OR UPDATE([JobCode]) OR UPDATE([Inactive]))
    BEGIN
        INSERT INTO [mydb].[dbo].[AT_Person_To_Push] (
                [Facility],
                [VendorID],
                [Person_code],
                [First_Name],
                [Last_Name],
                [JobCode],
                [Alink],
                [Inactive]
            )
        SELECT  [Facility],
                [VendorID],
                [Person_code],
                [First_Name],
                [Last_Name],
                [JobCode],
                [Alink],
                [Inactive]
        FROM inserted 
    END
END
Run Code Online (Sandbox Code Playgroud)

trigger t-sql

9
推荐指数
2
解决办法
3992
查看次数

MSSQL CLR 拒绝访问路径“c:\some\path”

我认为这是一个权限问题,但我无法找到它。

我在一台服务器(SQL Server 2016)上有一组 CLR,它们可以正常工作。所有这些都被标记为 UNSAFE,并且它们执行各种类型的文件 I/O(读取、写入、复制、移动、重命名等)。我可以通过 SSMS 或同样轻松地从工作中运行它们。

我需要将它们安装在另一台服务器(也是 SQL Server 2016)上。使用原始的 Visual Studio 项目,我已将它们部署到新服务器。它们出现在 SSMS 中。那部分看起来不错。

当我从 SSMS 尝试运行一个时,我收到以下错误:“拒绝访问路径‘我传入的任何路径’。”

我在 Windows 登录下登录到 SSMS。我有数据库的权限,我是 dbo。我是服务器管理员。我在文件系统中有权限。

我还能缺少什么?

sql-server permissions sql-clr files sql-server-2016

8
推荐指数
1
解决办法
5443
查看次数