if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[writeInfo]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[writeInfo]
GOCREATE PROCEDURE [dbo].[writeInfo] 
@info varchar(8000),--要写入的信息的内容 
@fName varchar(8000),--要写入信息的文件的文件名。 
@Append int=0--,是否追加到现有文件。0,创建新的文件,其他,追加到现有文件。 
as
begin 
declare @tmpFile varchar(8000)--临时文件 
declare @cmd varchar(8000)--命令 
set @tmpFile=cast(cast(rand()*9999999999 as bigint)+1000000000 as varchar)+'.tmp'---产生一个临时文件。 
if @Append=0 
begin--创建新的文件。 
set @cmd='echo '+@info+'>'+@fName 
exec master..xp_cmdshell @cmd 
end 
else 
begin 
set @cmd='echo '+@info+'>'+@tmpFile 
exec master..xp_cmdshell @cmd 
set @cmd='copy '+@fName+'+'+@tmpFile+' '+@fName+' /b' 
exec master..xp_cmdshell @cmd 
set @cmd='del '+@tmpFile 
exec master..xp_cmdshell @cmd 
end
end 放一个写文件的存储过程

解决方案 »

  1.   

    这个存储过程可以写UTF-8的文件吗?
      

  2.   


    @info varchar(8000),--要写入的信息的内容 
    @fName varchar(8000),--要写入信息的文件的文件名。 
    @Append int=0--,是否追加到现有文件。0,创建新的文件,其他,追加到现有文件。 不清楚哦,@fName写成 *.txt的话,出来的是ansi编码的帮你顶吧
      

  3.   

    我觉得用 sp_OACreate 调用“Scripting.FileSystemObject”的方法可能会好点。
    但是如何来写成utf-8的还需要研究。DECLARE @object int
    DECLARE @hr int
    DECLARE @src varchar(255)
    Declare @desc varchar(255)
    Declare @tmp int
    declare @msg varchar(3000)
    declare @strPath nvarchar(512)SET @msg='Hello.   MS   SQL   Server   2000.   I   Love   you!!!'       --這字串將會被寫到SQL   Server的安裝目錄下的Nipsan.Txt文件里面
    Set @strPath='D:\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   
      

  4.   

    参考:T-SQL代码:
    EXEC master..xp_cmdshell 'bcp 库名.dbo.表名 out c:\Temp.xls -c -q -S"servername" -U"sa" -P""'
    参数:S 是SQL服务器名;U是用户;P是密码
    说明:还可以导出文本文件等多种格式
    实例:EXEC master..xp_cmdshell 'bcp saletesttmp.dbo.CusAccount out c:\temp1.txt -c -w -q -S"pmserver" -U"sa" -P"sa"'
    EXEC master..xp_cmdshell 'bcp "SELECT au_fname, au_lname FROM pubs..authors ORDER BY au_lname" queryout C:\ authors.txt -c -w -Sservername -Usa -Ppassword'后面加个参数 -w,表示使用unicode字符。
      

  5.   

    建义楼主用BCP,它可以自己创建文本文件,如存在的话会重写。