通过 sql 服务器 2008 中的触发器使用 bcp
Using bcp through a trigger in sql server 2008
触发器的目的是在 table 上插入数据后使用 bcp 从 table 导出特定数据,所以我想这样做,我知道触发器等待对于 bcp,它正在等待 table 上的锁被释放,但该锁一直保持到触发器之后,因此它不起作用。我该怎么做?或者我需要添加一些功能或其他东西吗?
我正在使用 SQL Server 2008。
ALTER TRIGGER [TRIGGER] on [TABLE] after INSERT AS BEGIN
DECLARE @CMD NVARCHAR(1000)
SET @CMD = 'cd.. && "C:\Program Files\Microsoft SQL Server0\Tools\Binn\bcp.exe" "SELECT TOP 1 CODE FROM[TABLE] WITH (NOLOCK) ORDER BY ID DESC" queryout "\FOLDER\FOLDER\FILE.txt" -T -c -S "[SERVERNAME]"'
EXEC master..XP_CMDSHELL @CMD
END
不确定这是否可行,但您可以尝试更改为 INSTEAD OF 触发器并在触发器内执行 INSERT 和 bcp
我怀疑这可能会绕过 table 上的锁。
不要在触发器中使用 bcp
。即使您可以让它工作,它也会降低您的数据库速度,可能会达到无法使用的程度。 bcp
是一个命令行实用程序,应视为一个
我建议您使用 SQL Server Agent 在计划或触发的基础上执行额外的操作
您还可以阅读 this 帮助您开始使用代理的教程
如果您没有 SQL 服务器代理(Express 不包含它),那么您还有其他一些选择:
- 编写自己的代理。 Here is an example
- 插入后调用存储过程。 This answer 使用该方法解决了与您发布的问题类似的问题
- 使用存储过程写入数据并处理导出代码
- 使用计划任务按计划处理数据(这是
bcp
可以在不降低服务器性能的情况下使用的地方)
触发器的目的是在 table 上插入数据后使用 bcp 从 table 导出特定数据,所以我想这样做,我知道触发器等待对于 bcp,它正在等待 table 上的锁被释放,但该锁一直保持到触发器之后,因此它不起作用。我该怎么做?或者我需要添加一些功能或其他东西吗?
我正在使用 SQL Server 2008。
ALTER TRIGGER [TRIGGER] on [TABLE] after INSERT AS BEGIN
DECLARE @CMD NVARCHAR(1000)
SET @CMD = 'cd.. && "C:\Program Files\Microsoft SQL Server0\Tools\Binn\bcp.exe" "SELECT TOP 1 CODE FROM[TABLE] WITH (NOLOCK) ORDER BY ID DESC" queryout "\FOLDER\FOLDER\FILE.txt" -T -c -S "[SERVERNAME]"'
EXEC master..XP_CMDSHELL @CMD
END
不确定这是否可行,但您可以尝试更改为 INSTEAD OF 触发器并在触发器内执行 INSERT 和 bcp
我怀疑这可能会绕过 table 上的锁。
不要在触发器中使用 bcp
。即使您可以让它工作,它也会降低您的数据库速度,可能会达到无法使用的程度。 bcp
是一个命令行实用程序,应视为一个
我建议您使用 SQL Server Agent 在计划或触发的基础上执行额外的操作
您还可以阅读 this 帮助您开始使用代理的教程
如果您没有 SQL 服务器代理(Express 不包含它),那么您还有其他一些选择:
- 编写自己的代理。 Here is an example
- 插入后调用存储过程。 This answer 使用该方法解决了与您发布的问题类似的问题
- 使用存储过程写入数据并处理导出代码
- 使用计划任务按计划处理数据(这是
bcp
可以在不降低服务器性能的情况下使用的地方)