我在数据库(Microsoft sql服务器)中有一个脚本(批处理)和一个表。我需要他们一起努力。
脚本从数据库中收集数据,并使用它来调用外部程序,该程序将带有从表和外部程序收集的数据的标签打印为pdf。
对于表的每个插入,我希望脚本使用插入中的字段之一作为参数来运行。
示例:
INSERT INTO table1
VALUES (value1, value2, value3);
所以我想让脚本像这样运行:Script.bat value1
有人告诉我触发器不是最佳选择,因为如果触发器期间发生任何错误,将无法进行插入。
希望你能帮助我!
答案 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并逐个执行了批处理脚本。 如果可能,根据您的批处理文件,您可以合并所有受影响的数据,并将其一次传递给批处理命令,而无需使用光标
我希望对您有帮助