Here are steps:
- Create Raw Staging Table With All Varchar Columns
- Importing From CSV To Raw Staging Table
- Create Target Table With Typed Columns
- Copy Raw Staging Table To Target Table
-- ================================================
PRINT '1 CREATE RAW STAGING TABLE WITH ALL VARCHAR COLUMNS'
CREATE TABLE [dbo].[MyTableName_BULK_INSERT](
[SomeStringColumn] [nvarchar](255) NULL,
[SomeIntColumn] [nvarchar](255) NULL
) ON [PRIMARY]
-- ================================================
PRINT '2 IMPORTING FROM CSV TO RAW STAGING TABLE'
BULK INSERT MyTableName_BULK_INSERT
FROM 'C:\Temp\MySourceFile.csv'
WITH
(
FIRSTROW = 2, -- If has a header row
FIELDTERMINATOR = '\t',
ROWTERMINATOR = '\n',
MAXERRORS = 0,
ERRORFILE = 'C:\Temp\Bulk_Insert_Errors.log',
CODEPAGE = 'ACP',
DATAFILETYPE = 'widechar'
)
-- select count(*) from MyTableName_BULK_INSERT
-- select top 10 * from MyTableName_BULK_INSERT
-- ================================================
PRINT '3 CREATE TARGET TABLE WITH TYPED COLUMNS'
CREATE TABLE [dbo].[MyTableName](
[SomeStringColumn] [varchar](255) NOT NULL,
[SomeIntColumn] [int] NOT NULL
CONSTRAINT [PK_MyTableName] PRIMARY KEY CLUSTERED
([SomeStringColumn] ASC)
WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
)
-- ================================================
PRINT '4 COPY RAW STAGING TABLE TO TARGET TABLE'
INSERT INTO [MyTableName]
([SomeStringColumn]
,[SomeIntColumn])
(SELECT
[SomeStringColumn]
,[SomeIntColumn]
FROM [MyTableName_BULK_INSERT])
-- select count(*) from [MyTableName]
-- select top 10 * from [MyTableName]
-- ================================================
PRINT 'FINISHED'