Sql server 如何使用SQL触发器运行批处理文件(.Bat)

Sql server 如何使用SQL触发器运行批处理文件(.Bat),sql-server,vb.net,windows,batch-file,triggers,Sql Server,Vb.net,Windows,Batch File,Triggers,我正在尝试使用SQL触发器运行存储在D:\驱动器中的.bat文件。 当表中发生某些操作时,需要触发此触发器并执行批处理文件。 为此,我创建了一个示例触发器 Create TRIGGER [dbo].[TestBatch] ON [dbo].[RawMaterial] FOR UPDATE AS DECLARE @PassedVariable VARCHAR(100) DECLARE @CMDSQL VARCHAR(1000) begin --SET @PassedVariable = 'Sql

我正在尝试使用SQL触发器运行存储在D:\驱动器中的.bat文件。 当表中发生某些操作时,需要触发此触发器并执行批处理文件。 为此,我创建了一个示例触发器

Create TRIGGER [dbo].[TestBatch] ON [dbo].[RawMaterial] 
FOR UPDATE
AS
DECLARE @PassedVariable VARCHAR(100)
DECLARE @CMDSQL VARCHAR(1000)
begin
--SET @PassedVariable = 'SqlAuthority.com'
SET @CMDSQL = 'D:\AutoServer.bat'-- + @PassedVariable
EXEC master..xp_CMDShell @CMDSQL
end
但我没有得到一个适当的输出。当我运行上面的脚本时,它给出了一些错误消息

设备还没有准备好。空的

我要求所有人为我的上述问题提供解决方案。
提前谢谢

在表触发器上运行bat文件不是一个好主意。根据您的bat文件正在执行的操作以及它必须执行的操作的多少,可能会出现很大的问题。此外,触发表触发器的频率也会加剧问题。
最好将受影响的表触发器记录存储到另一个单独的表中,例如使用已处理标志,并通过SQL计划作业定期运行bat文件,一旦通过bat文件处理了记录,就会将已处理标志翻转为true。

不要这样做。使用xp_cmdshell运行批处理文件可能会出现很多问题,当这些问题出现时,触发器将阻止/回滚/错误数据库更改。您应该实现一个排队系统。您触发对队列表的写入,一个单独的进程从该队列中取出记录并运行批处理文件。通过这种方式,您可以将数据库更改与批处理文件分离。关于您的错误:您确定预期的所有驱动器都在那里吗?您的SQL Server上有D驱动器吗?请记住,xp_cmdshell在SQL Server上运行,而不是在客户端上,并且它通常作为SQL Server服务运行