【问题标题】:Ignore null's in exported .csv file, bcp utility忽略导出的 .csv 文件中的空值,bcp 实用程序
【发布时间】:2018-02-05 10:45:59
【问题描述】:

如何在导出的 .csv 文件中忽略空值,我使用了 bcp 实用程序 在 sql server 中,这就是它的样子。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID ('[dbo].[generateCSV]') IS NOT NULL
DROP PROCEDURE [dbo].[generateCSV]
GO

  CREATE PROCEDURE [dbo].[generateCSV]

(
 @table varchar(100),
 @output varchar(100), 
 @date varchar(12),
 @server varchar(30)
)

AS

DECLARE @sql varchar(8000)

SELECT @sql = 'bcp "select * from ' + DB_NAME() + '.dbo.' + @table  + ' 
where reportingdate = ''' + @date + '''"' + ' queryout ' +  @output + '  -c 
-C65001 -t";" -r"\n" -T -S' + @server 

 exec master..xp_cmdshell @sql 




       -- Main EXEC

EXEC dbo.generateCSV @table = 'Clients', @date = '2017-10-31', @output = 
'//172.18.16.109/share/Test.csv (server with export target location ) ', 
@server = '172.18.16.108(server we are connected to and from which we are 
taking the data)' 

在 notepad++ 中导出并打开我的文件后,空列最终被 NULL 填充。

我希望它看起来像......


编辑:

我在我的选择子句中包含了 ISNULL(),但记事本仍然会将这些列读取为空值。

SELECT @sql = 'bcp "select 
ReportingDate,uniqClientID,registrationNumber,name,ISNULL(vatNumber,'''') as 
vatNumber,ISNULL(entityStatusCode,'''') as entityStatusCode, 
maximumLifetimeDPD from ' + DB_NAME() + '.dbo.' + 
@table  + ' where ReportingDate = ''' + @date + '''"' + ' queryout ' +  
@output + '  -c -C65001 -t";" -r"\n" -T -S' + @server 

【问题讨论】:

标签: sql-server csv tsql export-to-csv bcp


【解决方案1】:

SELECT @sql = 'bcp "select * from ' + DB_NAME() + '.dbo.' + @表 + ' where reportingdate = ''' + @date + '''"' + ' queryout ' + @output + ' -c -C65001 -t";" -r"\n" -T -S' + @server

写具体的列名,而不是SELECT *

无论你觉得NULL 会出现在哪里,你都可以像下面这样写。

....   
SELECT 
Column1,
ISNULL(Column2,'') AS Column2,
Column3,
....
 from ' + DB_NAME() + '.dbo.' + @table 
.....

注意:如果您有 INT 作为数据类型,您需要根据以下查询稍微更改您的选择。

DECLARE @INTVAL INT
SET @INTVAL = NULL
SELECT
ISNULL(LTRIM(NULLIF(@INTVAL, 0)), '') AS ColumnName

【讨论】:

  • 是的,这一定是唯一的方法,尽量避免它,因为我有太多的空列。
  • 如果在select中不处理,SQL默认返回NULL
  • 我有问题。 SELECT @sql = 'bcp "select ReportingDate,uniqClientID,registrationNumber,name,ISNULL(vatNumber,'') as vatNumber ...我得到一些语法错误,未闭合的引号,但是当我删除 ISNULL(vatNumber,'') as vatNumber从 select 子句中它会工作得很好。
  • 您能否将问题本身中的查询更新为编辑。这将有助于解决。
  • 你可以看看。
猜你喜欢
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多