如何在每次插入时运行脚本

时间:2018-09-28 09:49:02

标签: sql sql-server database batch-file

我在数据库(Microsoft sql服务器)中有一个脚本(批处理)和一个表。我需要他们一起努力。

脚本从数据库中收集数据,并使用它来调用外部程序,该程序将带有从表和外部程序收集的数据的标签打印为pdf。

对于表的每个插入,我希望脚本使用插入中的字段之一作为参数来运行。

示例:

INSERT INTO table1
  VALUES (value1, value2, value3);

所以我想让脚本像这样运行:Script.bat value1

有人告诉我触发器不是最佳选择,因为如果触发器期间发生任何错误,将无法进行插入。

希望你能帮助我!

1 个答案:

答案 0 :(得分:0)

实际上,在触发器中执行外部脚本不是一个好主意,但是您可以在开发服务器中测试和评估结果

这是示例SQL trigger代码

create trigger tgSample on FolderTable after Insert
as
begin

declare @name varchar(100)

DECLARE newdata_cursor CURSOR FAST_FORWARD FOR 
select foldername from inserted

OPEN newdata_cursor

FETCH NEXT FROM newdata_cursor INTO @name

WHILE @@FETCH_STATUS = 0
BEGIN

    DECLARE @cmd VARCHAR(1000)
    SET @cmd = 'c:\desktop\example.bat' + ' ' + @name
    EXEC master..xp_cmdshell @cmd

    FETCH NEXT FROM newdata_cursor INTO @name
END

CLOSE newdata_cursor
DEALLOCATE newdata_cursor

end

请注意,我在代码内将参数传递给了批处理脚本。

与触发器相关的一个重要说明,触发器以基于集合的方式工作 因此,请为执行一行以上的触发器做好准备。 因此,假设您可以在表中插入例如10行,则我创建了SQL cursor并逐个执行了批处理脚本。 如果可能,根据您的批处理文件,您可以合并所有受影响的数据,并将其一次传递给批处理命令,而无需使用光标

我希望对您有帮助