IDENTITYが設定されているCSVファイルのインポート

コンピューター

IDENTITY=自動採番 データの取り込み

入力CSVファイル(ヘッダーあり、カンマ区切り、S-JIS、改行CRLF)

Id,FamilyName,FirstName,SecondName,ThirdName,Birthday,SexId,StatusId
1,足立,真一,,,1986/01/19 12:00:19,1,1
2,今村,達夫,,,1985/04/25 12:00:25,2,1
3,真宮寺,友寄,,,1985/12/20 12:00:20,1,1
4,新,一,,,1985/04/24 12:00:24,1,1
5,後本,美恵,,,1989/05/23 12:00:23,2,1
        ・
        ・
        ・

保存先:C:\Dev\User.csv

インポート先(SQLServer、IDENTITY設定あり)

CREATE TABLE [dbo].[TUser](
	[Id] [int] IDENTITY(1,1) NOT NULL,
	[FamilyName] [varchar](20) NULL,
	[FirstName] [varchar](20) NULL,
	[SecondName] [varchar](20) NULL,
	[ThirdName] [varchar](20) NULL,
	[Birthday] [datetime] NULL,
	[SexId] [int] NULL,
	[StatusId] [int] NULL

データベース名:TESTDATA

ストアドに登録して繰り返し使えるようにする

1回だけなら、SSMSでインポートすれば良いのですが、デバッグ等で初期状態に戻したりを繰り返す予定なのでストアドに記述していきました。

今回は、最初にインポート先のテーブルデータをクリアして、IDENTITY値を初期化してからデータのインポートを行いました。

※ SSMSでのインポートは別途書きます。

DELETE FROM TUser 

DBCC CHECKIDENT (TUser ,RESEED ,0)

BULK INSERT TUser FROM 'C:\Dev\User.csv' 
	WITH (
		FORMAT = 'CSV',
		FIRSTROW = 2,
		KEEPIDENTITY
	)

FORMAT = ‘CSV’

SQL Server 2017 から使えるらしい。

CSVファイルなら、FIELDTERMINATOR、ROWTERMINATORを指定しなくても、FORMAT = ‘CSV’だけで幸せになれるらしい。

FIRSTROW = 2

ヘッダーが1行あるのでデータ行(2行目)から読み込んで欲しい時に使用。

KEEPIDENTITY

IDENTITYの設定された列に入力データの数値をそのままインポートする時に使用。このオプションがないとエラーか自動採番されます。インポート後に新しいデータが登録された場合、インポートされた IDENTITY列の最大値の次が設定されます。

コメント

タイトルとURLをコピーしました