触发器写入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 insertasexec master..xp_cmdshell 'bcp "select * from [数据库].dbo.[表名](nolock)" queryout d:\test.txt -c -U sa -P 密码 '
[解决办法]
但这么做是极没效率的事,每次新增记录都做全表导出会占用产生磁盘IO.
建议可在触发器里把新增的记录转存一份到历史表里,然后固定时间对历史表导出为文件即可.
[解决办法]
[解决办法]
- SQL code
exec sp_configure 'xp_cmdshell',1GOreconfigureGO
[解决办法]
程序连接SQL Server的帐号,要有执行xp_cmdshell的权限.
- SQL code
GRANT EXECUTE ON sys.xp_cmdshell TO [数据库User名]
[解决办法]
直接执行