从CSV插入'NULL'附加不需要的单引号

时间:2017-08-08 17:21:39

标签: sql sql-server sql-server-2008

美好的一天。我有一个查询从csv抓取数据并将其插入表中。但是,csv中有空值,当插入发生时,插入会在单词'NULL'之前和之后附加单引号。我使用了KEEPNULLS,但仍然遇到问题。

我宁愿不打电话给每一栏并注入一个合并或其他我将其从NULL更改为其他内容然后再返回NULL的内容。表中的列数最终会增长,我不想在此脚本中更改任何内容。

是否有任何方法可以从csv中将数据插入到表中,其中没有附加单引号的csv?谢谢您的帮助。

从csv

中检索和插入数据的脚本
TRUNCATE TABLE jj 

BULK INSERT jj 
  FROM 'F:\NewHorizon\ExportSubObjGroup.csv' 
  WITH 
    ( 
      datafiletype = 'char', 
      fieldterminator = ',', 
      keepnulls 
    ) 

表I我想将数据插入

CREATE TABLE [dbo].[jj](
    [pkid] [bigint] NOT NULL,
    [mo] [nvarchar](20) NULL,
    [pr] [nvarchar](20) NULL,
    [pri] [bigint] NULL,
    [vis] [int] NULL,
    [sys] [nvarchar](5) NULL,
    [are] [nvarchar](5) NULL,
    [equ] [nvarchar](5) NULL,
    [dev] [nvarchar](5) NULL,
    [fiee] [nvarchar](250) NULL,
    [syst] [nvarchar](50) NULL,
    [areaPr] [nvarchar](50) NULL,
    [equipPr] [nvarchar](50) NULL,
    [devicePr] [nvarchar](50) NULL,
    [attr] [nvarchar](50) NULL,
    [grou] [bigint] NULL,
    [eventi] [bigint] NULL,
    [numid] [bigint] NULL,
    [dataType] [nvarchar](10) NULL,
    [typeCol] [int] NULL,
    [boolVal] [nvarchar](50) NULL,
    [greaterThan] [nvarchar](50) NULL,
    [greaterEqThan] [nvarchar](50) NULL,
    [lessThan] [nvarchar](50) NULL,
    [lessEqThan] [nvarchar](50) NULL,
    [equalTo] [nvarchar](50) NULL,
    [note] [nvarchar](50) NULL,
    [durat] [nvarchar](10) NULL,
    [groupi] [nvarchar](10) NULL,
    [plcTagC] [nvarchar](10) NULL,
    [eventidC] [nvarchar](10) NULL,
    [fnC] [nvarchar](5) NULL,
 CONSTRAINT [PK_groupings45] PRIMARY KEY CLUSTERED 
(
    [pkid] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

来自csv的数据

1,1,1,1,0,0,0,0,0,0,PH,NULL,NULL,SYSTEM_IO,DI_MCR,3001,1,3001,NULL,0,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
2,1,1,1,0,0,0,0,0,0,PH,NULL,NULL,SYSTEM_IO,DI_MCR_CP,3002,2,3002,NULL,0,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL
3,1,1,1,0,0,0,0,0,0,PH,NULL,NULL,SYSTEM_IO,DI_MCR_CP,3003,3,3003,NULL,0,1,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL

表jj中的结果

1   1   1   1   0   0   0   0   0   0   PH  'NULL'  'NULL'  SYSTEM_IO   DI_MCR  3001    1   3001    'NULL'  0   1   'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'
2   1   1   1   0   0   0   0   0   0   PH  'NULL'  'NULL'  SYSTEM_IO   DI_MCR_CP   3002    2   3002    'NULL'  0   1   'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'
3   1   1   1   0   0   0   0   0   0   PH  'NULL'  'NULL'  SYSTEM_IO   DI_MCR_CP   3003    3   3003    'NULL'  0   1   'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'  'NULL'

1 个答案:

答案 0 :(得分:2)

您可以在文件进入之前更新文件以用''替换它,或者您可以使用

更新导入后的表格
  Update table
  Set column = NULL 
  where column = 'NULL'

这是一个可以作为帖子导入作业的一部分执行的更新脚本。这花了我5分钟写在excel并粘贴在这里

UPDATE table SET[mo]=NULL WHERE [mo]='NULL'
UPDATE table SET[pr]=NULL WHERE [pr]='NULL'
UPDATE table SET[pri]=NULL WHERE [pri]='NULL'
UPDATE table SET[vis]=NULL WHERE [vis]='NULL'
UPDATE table SET[sys]=NULL WHERE [sys]='NULL'
UPDATE table SET[are]=NULL WHERE [are]='NULL'
UPDATE table SET[equ]=NULL WHERE [equ]='NULL'
UPDATE table SET[dev]=NULL WHERE [dev]='NULL'
UPDATE table SET[fiee]=NULL WHERE [fiee]='NULL'
UPDATE table SET[syst]=NULL WHERE [syst]='NULL'
UPDATE table SET[areaPr]=NULL WHERE [areaPr]='NULL'
UPDATE table SET[equipPr]=NULL WHERE [equipPr]='NULL'
UPDATE table SET[devicePr]=NULL WHERE [devicePr]='NULL'
UPDATE table SET[attr]=NULL WHERE [attr]='NULL'
UPDATE table SET[grou]=NULL WHERE [grou]='NULL'
UPDATE table SET[eventi]=NULL WHERE [eventi]='NULL'
UPDATE table SET[numid]=NULL WHERE [numid]='NULL'
UPDATE table SET[dataType]=NULL WHERE [dataType]='NULL'
UPDATE table SET[typeCol]=NULL WHERE [typeCol]='NULL'
UPDATE table SET[boolVal]=NULL WHERE [boolVal]='NULL'
UPDATE table SET[greaterThan]=NULL WHERE [greaterThan]='NULL'
UPDATE table SET[greaterEqThan]=NULL WHERE [greaterEqThan]='NULL'
UPDATE table SET[lessThan]=NULL WHERE [lessThan]='NULL'
UPDATE table SET[lessEqThan]=NULL WHERE [lessEqThan]='NULL'
UPDATE table SET[equalTo]=NULL WHERE [equalTo]='NULL'
UPDATE table SET[note]=NULL WHERE [note]='NULL'
UPDATE table SET[durat]=NULL WHERE [durat]='NULL'
UPDATE table SET[groupi]=NULL WHERE [groupi]='NULL'
UPDATE table SET[plcTagC]=NULL WHERE [plcTagC]='NULL'
UPDATE table SET[eventidC]=NULL WHERE [eventidC]='NULL'
UPDATE table SET[fnC]=NULL WHERE [fnC]='NULL'