【问题标题】:Cannot dump table data to file using BCP when called from JDBC从 JDBC 调用时,无法使用 BCP 将表数据转储到文件
【发布时间】:2011-01-05 14:19:53
【问题描述】:

我已经编写了一个程序来将表数据转储到文本文件中(假设已声明相关变量);

SET @sql = '"SELECT * FROM ##OutputData"'

SET @cmdline = 'bcp '+ @sql +' queryout '+@OutputPath+'\outputFile.csv -c -t -T -S' + @@ServerName

EXEC master..xp_cmdshell @cmdline

当从 SQL Server 内部执行时,此过程可以正常工作,但在 Java 中从 JDBC 调用时则不行。

通过查看活动监视器,我可以看到执行查询"SELECT * FROM ##OutputData" 的事务被执行该过程的事务阻止。有效地使进程陷入僵局。

我玩过代码,根本不明白为什么会发生这种情况。有什么我在某处遗漏的东西吗?

感谢您的帮助...

编辑:将 Quartz 的引用改为 JDBC,因为这可能更相关。

【问题讨论】:

    标签: tsql jdbc bcp jdbctemplate


    【解决方案1】:

    我相信我已经找到了这个问题的答案。

    由于 Spring 使用它自己的事务管理器,它会锁定我在过程中创建的表。 当该过程执行 BCP 时,它在 SQL Server 中运行,超出了 Spring 事务的范围。因此 BCP 无法访问它需要的表,因为它们被 Springs 事务锁定。该过程无法继续,因为它正在等待 BCP,因此整个过程陷入死锁。

    我注意到,只要 BCP 命令具有外部事务,就会发生这种情况,尽管 BCP 具有 TransactionIsolation 标志,但这在这种情况下似乎没有任何影响。

    为了解决这个问题,我现在使用 SQL Server Jobs 运行该过程,没有任何事务。

    无论如何,至少我很感激这个问题为我赢得了“风滚草”徽章;) 谢谢大家!

    【讨论】:

      猜你喜欢
      • 2019-09-18
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 1970-01-01
      • 2017-01-20
      • 2011-01-20
      • 2015-06-05
      • 1970-01-01
      相关资源
      最近更新 更多