【问题标题】:SQL Server 2014: FileTable Trigger w/ Stored Procedure w/ xp_cmdshellSQL Server 2014:带有 xp_cmdshell 的存储过程的 FileTable 触发器
【发布时间】:2016-06-07 14:05:46
【问题描述】:

我在 SQL Server 2014 中使用 FileTable,需要运行一个可执行文件来解析任何插入/更新/删除文件的文件名,然后可执行文件将解析的信息插入到数据库的其他表中名字。我不希望 .exe 运行很长时间,但如果遇到问题,我不想长时间锁定它。

例如:

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

【问题讨论】:

  • 您有 .exe 的源代码吗?也许 try/catch 可以优雅地处理任何问题,记录它们(以便您稍后分析、调试),然后快速退出。
  • 确实,我有尝试/捕获。我认为它的记录速度足够快。我开始向数据库添加许多触发器,因为它们是我从旧系统升级到新系统所必需的,而旧系统数据仍在创建中,而新系统需要数据。虽然我明白你的意思,但我对所有需要做的事情思考得越多,核心问题就越与我的情况有关,即触发器是否会在存储过程完成之前锁定表。
  • 微软文档说 xp_cmdshell 将同步运行。触发器也同步运行。所以,如果你的 exe 卡住了,它会挂起触发器,这将挂起插入和其他东西。 msdn.microsoft.com/en-us/library/ms175046.aspx#remarks
  • 发布为答案,我会接受

标签: sql-server stored-procedures triggers


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2012-08-07
    • 2019-03-25
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多