MSSql中启用xp_cmdshell调用第三方程序以及遇到中文路径时报错的解决方案

本文介绍如何在SQL Server中使用触发器配合xp_cmdshell功能,在数据表插入新记录时自动生成TXT文件,详细步骤包括启用及禁用xp_cmdshell、编写触发器等。

需求环境:数据表增加一条数据时在对应的目录下生成一个文本文件记录数据库的记录提供给第三方程序使用。

使用xp_cmdshell 默认情况下没有被打开

1.打开启用xp_cmdshell

--开启xp_cmdshell部分
--
------------------------------------------------
--
 To allow advanced options to be changed.
EXEC sp_configure 'show advanced options'1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell'1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO


--通过xp_cmdshell执行shell命令的部分
--
------------------------------------------------
Exec xp_cmdshell 'bcp '
GO


--关闭xp_cmdshell部分
--
---------------------------------------------------
--
 To allow advanced options to be changed.
EXEC sp_configure 'show advanced options'1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure 'xp_cmdshell'0
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO

2.使用xp_cmdshell  生成txt 文件

-- =============================================
-- Author:  <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER TRIGGER [dbo].[table_trg]
   ON  [dbo].[table]
   AFTER INSERT
AS
DECLARE @content nvarchar(1024),@id nvarchar(1024)
DECLARE @lReturn int
DECLARE @cmd nvarchar(1024),@var nvarchar(1024)
BEGIN
 -- SET NOCOUNT ON added to prevent extra result sets from
 -- interfering with SELECT statements.
 SET NOCOUNT ON;

     select top 1 @content= name,@id= id from [table] order by id desc
    -- Insert statements for trigger here
 SET @var = @content
 SET @cmd = N'echo ' + N'"' + @var + N'"' +  N'>d:/workspace/' + @nid + '.txt'
 EXEC tpm..xp_cmdshell @cmd

END

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值