/***************************************************************************
// 说明 : 根据SQL语句生成文本文件 (带日期戳,字段用逗号,分隔)
// SQL语句里所有出现的表名要用 [数据库名].[用户名].[表名] 来详细标记
// 创建 : maggiefengyu 邮件 : maggiefengyu@tom.com 日期 :2006-03-03
***************************************************************************/
alter PROCEDURE sp_sql_query_to_file(
@servername varchar(50), --服务器名
@username varchar(50), --用户名,如果用NT验证方式,则为空''
@password varchar(50) , --密码
@sql_query varchar(2000) , --SQL查询语句,有字符条件时用单引号
@filePath_name varchar(1000), --导出路径和文件名
@date datetime --保存文件时的生成日期戳
)AS
DECLARE @sql varchar(8000)
SET @sql='bcp "'+@sql_query + '" queryout '+' "'+@filePath_name+'_'+
convert(varchar(12),@date,112)+'.txt " /t "," /w'
+' /S '+@servername
+CASE WHEN ISNULL(@username,'')='' THEN '' ELSE ' /U '+@username END
+' /P '+ISNULL(@password,'')
select @sql
EXEC master..xp_cmdshell @sql
IF @@Error<>0 BEGIN
print '生成文件时出错了,请查看!'+@@Error
END
GO
-- 调用方法举例:
-- --
DECLARE @dt datetime
-- DECLARE @sql_query varchar(6000)
set @dt=getdate()
-- set @sql_query='select convert(varchar,orderdate,120),'+
-- 'convert(varchar,requireddate,120),'+
-- 'convert(varchar,shippeddate,120),'+
-- 'shipcountry from northwind.dbo.orders '+
-- 'where orderdate<getdate()-30'
-- select len(@sql_query)
--
-- EXEC sp_sql_query_to_file '192.168.0.2','t_user','t_user_pwd',@sql_query,'e:/yu/orders',@dt
EXEC sp_sql_query_to_file 'lidaweipc','sa','infact','select * from Northwind.dbo.Orders','d:/orders',@dt