在SQL Server里把SQL语句结果生成文本文件

在SQL Server里可以调用DOS下的命令行工具bcp来实现把表里的数据或者SQL语句结果生成文本文件。

BCP命令的参数格式:

BCP {dbtable | query} {in | out | queryout | format} datafile
[-m maxerrors]      [-f formatfile]     [-e errfile]
[-F firstrow]       [-L lastrow]       [-b batchsize]
[-n native type]     [-c character type]   [-w wide character type]
[-N keep non-text native] [-V file format version] [-q quoted identifier]
[-C code page specifier] [-t field terminator]  [-r row terminator]
[-i inputfile]      [-o outfile]       [-a packetsize]
[-S server name]     [-U username]      [-P password]
[-T trusted connection]  [-v version]       [-R regional enable]
[-k keep null values]   [-E keep identity values]
[-h "load hints"]

但命令行下面的操作在传递变量上不太灵活,我参照 CSDN里邹健写File2Table的例子,

写了一个把SQL语句结果生成文本文件的系统存储过程 sp_sql_query_to_file.sql:

/***************************************************************************
// 说明 : 根据SQL语句生成文本文件 (带日期戳,字段用逗号,分隔)
//   SQL语句里所有出现的表名要用 [数据库名].[用户名].[表名] 来详细标记
// 创建 : maggiefengyu 邮件 : maggiefengyu@tom.com 日期 :2006-03-03
***************************************************************************/
create 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

时间: 2024-10-31 22:53:52

在SQL Server里把SQL语句结果生成文本文件的相关文章

Access和SQL Server里面的SQL语句的不同之处_数据库其它

我的感觉是,Accees数据库虽然可以称得上是小型的关系型数据库,并且也是使用的结构化查询语言SQL,但它的语法(主要体现在函数上),却类似vbscript的语法,我想,这应该和Access属于Office系列有关,基于它的开发和应用,自然就与VBA扯上关系,因而Access的函数库也就是VBA的函数库,而非SQL函数库.下面,我们来具体看下Access和SQL Server在查询语句的编写上具体的不同. 一.数据类型转换: Access: SELECT '调查'+CStr(Did) as di

[SQL Server]管理常用SQL语句

server|语句 [SQL Server]管理常用SQL语句 1. 查看数据库的版本        select @@version 2. 查看数据库所在机器操作系统参数        exec master..xp_msver 3. 查看数据库启动的参数         sp_configure 4. 查看数据库启动时间         select convert(varchar(30),login_time,120) from master..sysprocesses where spi

SQL Server里Grouping Sets的威力

原文:SQL Server里Grouping Sets的威力 在SQL Server里,你有没有想进行跨越多个列/纬度的聚集操作,不使用SSAS许可(SQL Server分析服务).我不是说在生产里使用开发版,也不是说安装盗版SQL Server. 不可能的任务?未必,因为通过SQL Server里所谓的Grouping Sets就可以.在这篇文章里我会给你概括介绍下Grouping Sets,使用它们可以实现哪类查询,什么是它们的性能优势. 使用Grouping Sets的聚合 假设你有个订单

在SQL Server里为什么我们需要更新锁

原文:在SQL Server里为什么我们需要更新锁 今天我想讲解一个特别的问题,在我每次讲解SQL Server里的锁和阻塞(Locking & Blocking)都会碰到的问题:在SQL Server里,为什么我们需要更新锁?在我们讲解具体需要的原因前,首先我想给你介绍下当更新锁(Update(U)Lock)获得时,根据它的兼容性锁本身是如何应对的. 一般来说,当执行UPDATE语句时,SQL Server会用到更新锁(Update Lock).如果你查看对应的执行计划,你会看到它包含3个部分

SQL Server利用bcp命令把SQL语句结果生成文本文件_MsSql

在SQL Server里可以调用DOS下的命令行工具bcp来实现把表里的数据或者SQL语句结果生成文本文件. BCP命令的参数格式: 复制代码 代码如下: BCP {dbtable | query} {in | out | queryout | format} datafile [-m maxerrors] [-f formatfile] [-e errfile] [-F firstrow] [-L lastrow] [-b batchsize] [-n native type] [-c cha

SQL Server里因丢失索引造成的死锁

原文:SQL Server里因丢失索引造成的死锁 在今天的文章里我想演示下SQL Server里在表上丢失索引如何引起死锁(deadlock)的.为了准备测试场景,下列代码会创建2个表,然后2个表都插入4条记录. 1 -- Create a table without any indexes 2 CREATE TABLE Table1 3 ( 4 Column1 INT, 5 Column2 INT 6 ) 7 GO 8 9 -- Insert a few record 10 INSERT IN

在SQL Server里如何进行页级别的恢复

在今天的文章里我想谈下每个DBA应该知道的一个重要话题:在SQL Server里如何进行页级别还原操作.假设在SQL Server里你有一个损坏的页,你要从最近的数据库备份只还原有问题的页,而不是还原整个数据库. 我们来破坏一个页 第一步我想向你展示下如何建立表(或索引)里有个特定页损坏的情景,这里我们会进行一些魔术,因为开箱即用(out-of-box)的SQL Server本身不会引入任何损坏的页(如果有的话,恭喜你找到了一个BUG).我们从创建一个新的数据库,往新建的表插入一些记录开始. 1

为什么我们需要在SQL Server里更新锁_MsSql

每次讲解SQL Server里的锁和阻塞(Locking & Blocking)都会碰到的问题:在SQL Server里,为什么我们需要更新锁?在我们讲解具体需要的原因前,首先我想给你介绍下当更新锁(Update(U)Lock)获得时,根据它的兼容性锁本身是如何应对的. 一般来说,当执行UPDATE语句时,SQL Server会用到更新锁(Update Lock).如果你查看对应的执行计划,你会看到它包含3个部分: 读取数据 计算新值 写入数据 在查询计划的第1部分,SQL Server初始读取

SQL Server里简单参数化的痛苦

原文:SQL Server里简单参数化的痛苦 在今天的文章里,我想谈下对于即席SQL语句(ad-hoc SQL statements),SQL Server使用的简单参数化(Simple Parameterization)的一些特性和副作用.首先,如果你的SQL语句包含这些,简单参数化不会发生: JOIN IN BULK INSERT UNION INTO DISTINCT TOP GROUP BY HAVING COMPUTE Sub Queries 一般来说,如果你处理所谓的安全执行计划(S