日期:2014-05-18  浏览次数:20971 次

触发器写入txt文件报错
我在某个表写了一个触发器,然后通过C#往表里插入数据:
触发器大致如下:

ALTER trigger [dbo].[testTrigger] on 表
for insert 
as 
exec master..xp_cmdshell 'bcp 表 out d:\test.txt /c /U sa /P 密码 '

不知道为什么每次插入数据总是会报错。

但是
exec master..xp_cmdshell 'bcp 表 out d:\test.txt /c /U sa /P 密码 '
这句话单独执行是可以的


bcp 表 out d:\test.txt /c /U sa /P 密码 
这句话在命令行里也可以执行

非常想知道怎么才能让数据库不报错?急,求教高人啊~~~~~

------解决方案--------------------
报什么错误,你是想干什么?
------解决方案--------------------
别这么乱用触发器

xp_cmdshell 是要禁止的语句,你还放在触发器进行
------解决方案--------------------
直接执行,别用触发器。
------解决方案--------------------
先不讨论效率问题,正确语法如下,
SQL code

ALTER trigger [dbo].[testTrigger] on 表名
for insert
as
exec master..xp_cmdshell 'bcp "select * from [数据库].dbo.[表名](nolock)" queryout d:\test.txt -c -U sa -P 密码 '

------解决方案--------------------
但这么做是极没效率的事,每次新增记录都做全表导出会占用产生磁盘IO.

建议可在触发器里把新增的记录转存一份到历史表里,然后固定时间对历史表导出为文件即可.


------解决方案--------------------
探讨
但这么做是极没效率的事,每次新增记录都做全表导出会占用产生磁盘IO.

建议可在触发器里把新增的记录转存一份到历史表里,然后固定时间对历史表导出为文件即可.

------解决方案--------------------
SQL code

exec sp_configure 'xp_cmdshell',1
GO
reconfigure
GO

------解决方案--------------------
程序连接SQL Server的帐号,要有执行xp_cmdshell的权限.
SQL code

  GRANT EXECUTE ON sys.xp_cmdshell TO [数据库User名]

------解决方案--------------------
直接执行