简体   繁体   中英

Insert 'NULL' From CSV Attaching Unwanted Single Quotes

Good day. I have a query that grabs data from a csv and inserts it into a table. However, there are nulls in the csv and when the insert happens, the insertion appends a single quote before and after the word 'NULL' . I used the KEEPNULLS but am still having issues.

I would prefer not to call out every column and inject a coalesce or something where I change it from NULL to something else then back to NULL again. The number of columns in the table will eventually grow and I would like to not have to change anything in this script.

Any way to insert data into a table from a csv that has NULLs in it without the single quotes attaching to it? Thanks for the help.

Script to Retrieve and insert data from csv

TRUNCATE TABLE jj 

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

Table I want to insert data into

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

The DATA from 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

The results in table 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'

You can either update the file before it goes in to replace it with '' or you can update the table post import with

  Update table
  Set column = NULL 
  where column = 'NULL'

Here's an update script you can execute as part of your post import job. This took me 5 minutes to write in excel and paste it here

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'

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM