我在 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) 我认为这是一个权限问题,但我无法找到它。
我在一台服务器(SQL Server 2016)上有一组 CLR,它们可以正常工作。所有这些都被标记为 UNSAFE,并且它们执行各种类型的文件 I/O(读取、写入、复制、移动、重命名等)。我可以通过 SSMS 或同样轻松地从工作中运行它们。
我需要将它们安装在另一台服务器(也是 SQL Server 2016)上。使用原始的 Visual Studio 项目,我已将它们部署到新服务器。它们出现在 SSMS 中。那部分看起来不错。
当我从 SSMS 尝试运行一个时,我收到以下错误:“拒绝访问路径‘我传入的任何路径’。”
我在 Windows 登录下登录到 SSMS。我有数据库的权限,我是 dbo。我是服务器管理员。我在文件系统中有权限。
我还能缺少什么?