2016-06-07 75 views
1

我在SQL Server 2014中使用FileTable,需要运行一个可执行文件来分析任何插入/更新/删除文件的文件名,然后执行可执行文件在数据库的其他表中插入从名称解析的信息。我不希望.exe长时间运行,但如果遇到问题,我不想长时间锁定它。SQL Server 2014:具有存储过程的FileTable触发器w/xp_cmdshell

例如:

CREATE PROCEDURE filename_parser 
    @name nvarchar(255) 
AS 
BEGIN 

    DECLARE @exe nvarchar(255) 
    SET @exe = 'c:\test\my.exe "' + @name + '"' 
    EXEC master..xp_cmdshell @exe 

END 
GO 

如果我运行从INSERTUPDATE触发存储过程,例如:

USE [db_1] 
GO 
CREATE TRIGGER [dbo].[i_table_a] 

    ON 
     [dbo].[table_a] 
    AFTER 
     INSERT 

AS 

    DECLARE @file nvarchar(255) 

    SELECT TOP 1 
     @file = name 
    FROM 
     inserted 

    EXEC filename_parser @name = @file 

将我最终锁定table_a直到可执行完成?对不起,如果答案很明显。我还没有找到一个简单的答案。任何帮助/指向适当的方向表示赞赏。

相关链接:

Do stored procedures lock tables/rows?

SQL Server - How to lock a table until a stored procedure finishes

+0

你有.exe的源代码吗?也许try/catch会优雅地处理任何问题,记录它们(这样你可以分析,稍后调试),然后快速退出。 – tgolisch

+0

确实,我有尝试/捕获。它的记录速度足够我假设。我开始为数据库添加许多触发器,因为它们对于我从旧系统升级到新系统是必要的,而旧系统数据仍在创建,而较新的系统需要这些数据。虽然我看到你的观点,但我更关注所有需要完成的事情,关于我的情况的核心问题就越多,也就是说,在存储过程完成之前,触发器是否锁定表。 – GibralterTop

+0

Microsoft文档说xp_cmdshell将同步运行。触发器也同步运行。所以,如果你的exe被卡住了,它会挂起触发器,这将挂起插入和其他东西。 https://msdn.microsoft.com/en-us/library/ms175046.aspx#remarks – tgolisch

回答

1

微软文档说的xp_cmdshell将同步运行。触发器也同步运行。所以,如果你的exe被卡住了,它会挂起触发器,这将挂起插入和其他东西。 msdn.microsoft.com/en-us/library/ms175046.aspx#remarks