SQL 带列名的 BCP
SQL BCP with column name
我正在尝试使用 BCP 将存储过程导出到 .csv 文件。它确实给了我一个 .CSV 格式的输出文件,但它不打印列名。
下面是脚本。请查看并让我知道我缺少什么
DECLARE @command VARCHAR(4000)
declare @fulldate varchar(30) = convert(varchar,GETDATE(),112)
declare @year varchar(30) = left(@fulldate,4)
declare @day varchar(30) = right(@fulldate,2)
declare @month varchar(30) = left(right(@fulldate,4),2)
DECLARE @FileDirectory VARCHAR(1000) = 'c:\'
DECLARE @FileName VARCHAR(255)= 'TestingDOC' + @month + '.' + @day + '.' + @year + '.txt'
declare @attach varchar(1255) = @fileDirectory + @fileName
SET @command = 'bcp "select * from ngprod.dbo.TEMP_PAS"'
+ ' queryout "' + @FileDirectory + @FileName + '"'
+ ' -c -t, -T -S'+ @@servername
EXEC master..xp_cmdshell @command
最简单的做法是在使用 queryout 时对所有列名进行联合。
所以下面提供了一个例子。
select 'col1','col2',col3','col4' ... etc
union all
select col1,col2,col3,col4 ... etc from yourtable
经过大量的试验和错误后,下面是关于如何添加列的答案
首先创建一个header.txt文件(在头文件里面添加你们所有的头文件)
例如,如果头文件需要名字、姓氏等
然后将以下查询粘贴到您的存储过程中
DECLARE @command VARCHAR(4000)
DECLARE @FileDirectory VARCHAR(1000) = 'c:\test\'
DECLARE @HeaderFile varchar(255) = 'Headers.txt'
DECLARE @FileName VARCHAR(255)
SET @FileName = 'TestFile_' + CONVERT(VARCHAR,GETDATE(),112)
SET @command = 'bcp "select * from TESTDB.dbo.TEST_Table"'
+ ' queryout "' + @FileDirectory + @FileName + '.txt"'
+ ' -c -q -t, -T -S'+@@servername
EXEC master..xp_cmdshell @command
SET @command = 'copy "' + @FileDirectory + @HeaderFile + '"+"' + @FileDirectory + @FileName + '.txt"' + ' "' + @FileDirectory + @filename + '.csv"'
EXEC master..xp_cmdshell @command
SET @command = 'del "' + @FileDirectory + @FileName + '.txt"'
EXEC master..xp_cmdshell @command
我正在尝试使用 BCP 将存储过程导出到 .csv 文件。它确实给了我一个 .CSV 格式的输出文件,但它不打印列名。 下面是脚本。请查看并让我知道我缺少什么
DECLARE @command VARCHAR(4000)
declare @fulldate varchar(30) = convert(varchar,GETDATE(),112)
declare @year varchar(30) = left(@fulldate,4)
declare @day varchar(30) = right(@fulldate,2)
declare @month varchar(30) = left(right(@fulldate,4),2)
DECLARE @FileDirectory VARCHAR(1000) = 'c:\'
DECLARE @FileName VARCHAR(255)= 'TestingDOC' + @month + '.' + @day + '.' + @year + '.txt'
declare @attach varchar(1255) = @fileDirectory + @fileName
SET @command = 'bcp "select * from ngprod.dbo.TEMP_PAS"'
+ ' queryout "' + @FileDirectory + @FileName + '"'
+ ' -c -t, -T -S'+ @@servername
EXEC master..xp_cmdshell @command
最简单的做法是在使用 queryout 时对所有列名进行联合。
所以下面提供了一个例子。
select 'col1','col2',col3','col4' ... etc
union all
select col1,col2,col3,col4 ... etc from yourtable
经过大量的试验和错误后,下面是关于如何添加列的答案
首先创建一个header.txt文件(在头文件里面添加你们所有的头文件) 例如,如果头文件需要名字、姓氏等
然后将以下查询粘贴到您的存储过程中
DECLARE @command VARCHAR(4000)
DECLARE @FileDirectory VARCHAR(1000) = 'c:\test\'
DECLARE @HeaderFile varchar(255) = 'Headers.txt'
DECLARE @FileName VARCHAR(255)
SET @FileName = 'TestFile_' + CONVERT(VARCHAR,GETDATE(),112)
SET @command = 'bcp "select * from TESTDB.dbo.TEST_Table"'
+ ' queryout "' + @FileDirectory + @FileName + '.txt"'
+ ' -c -q -t, -T -S'+@@servername
EXEC master..xp_cmdshell @command
SET @command = 'copy "' + @FileDirectory + @HeaderFile + '"+"' + @FileDirectory + @FileName + '.txt"' + ' "' + @FileDirectory + @filename + '.csv"'
EXEC master..xp_cmdshell @command
SET @command = 'del "' + @FileDirectory + @FileName + '.txt"'
EXEC master..xp_cmdshell @command