在SQL Server的存储过程中实现对文本的操作

//在SQL Server的存储过程中实现对文本的操作
如,对一个文本文件c:\ttt.txt;
怎么实现从文本中读取一行,怎么实现写入一行呢?


DECLARE @object int
DECLARE @hr int
DECLARE @src varchar(255), @desc varchar(255)
Declare @tmp int
declare @msg varchar(3000)

SET @msg='Hello. MS SQL Server 2000. I Love you!!!'   --這字串將會被寫到SQL Server的安裝目錄下的Nipsan.Txt文件里面

/*  取得SQL Server的安裝路徑*/
declare @strPath  nvarchar(512)
Exec sp_MSGet_Setup_paths @strPath OUTPUT
Set @strPath=@strPath+'\Nipsan.Txt'   --組成文件名
 

--創建Scripting組件實例
EXEC @hr = sp_OACreate 'Scripting.FileSystemObject', @object OUT
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT 
   SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    RETURN
END

--創建文件
EXEC @hr = sp_OAMethod @object, 'CreateTextFile', @tmp OUTPUT , @strPath
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END
--把@msg寫到文件里面去
EXEC @hr = sp_OAMethod @tmp, 'Write',NULL, @msg
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END
--關閉文件
EXEC @hr = sp_OAMethod @tmp, 'Close',NULL
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END
-----------寫文件操作Demo完成---------------------------------------------------------------

--打開文件
EXEC @hr = sp_OAMethod @object, 'OpenTextFile', @tmp OUTPUT ,@strPath
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END

SET @msg=''
--讀文件
EXEC @hr = sp_OAMethod @tmp, 'Read', @msg OUT,3000
IF @hr <> 0
BEGIN
   EXEC sp_OAGetErrorInfo @object
    RETURN
END
-----讀文件操作Demo完成


SELECT @msg AS RESULT






没有这么用过,不过可以提供几个方向的思路,从理论上说,SQL SERVER 能访问所有格式化的数据,要求文本文件有一定格式。
1、通过Microsoft.Jet.OLEDB.4.0连接成一个SERVER,再象访问一般连接数据库一样用SQL语句访问。以下一段从SQL SERVER帮助拷贝,是说明这个用法的。
2、用1法建立的连接SERVER,也可以通过OPENQUERY访问,具体可以看SQL SERVER的帮助。
3、非格式化的一些数据可以用xp_cmdshell调用DOS命令来写入文本文件,如这个小例子,写入一个变量到文本文件这段代码可以修改后嵌到你的存储过程里:
DECLARE @var varchar(100)
DECLARE @i int
DECLARE @cmd sysname
set @i=120
SET @var = '@i='+cast(@i as varchar(10))
SET @cmd = 'echo ' + @var + ' > VarOut.txt'
EXEC master..xp_cmdshell @cmd

猜你喜欢

转载自rs-zheng.iteye.com/blog/2041203
今日推荐