以下の形式の私のデータ。 SQLサーバーテーブルに挿入する必要があります。
agency NO
booknbr 06000330
bookdttm 2006-07-19 10:56:00
arrdttm 2006-05-07 05:42:00
aj_id A000009454
casenbr 06006640
off1 619
off2 634
arrplace DENNYS RESTAURANT
howarr O
juvstat
ko
remarks
armed
federal N
agency NO
booknbr 06000331
bookdttm 2006-07-24 12:11:00
arrdttm 2006-07-16 16:11:00
aj_id A000003215
casenbr 06010336
off1 641
off2
arrplace 219 W GLENCOVE AV
howarr V
juvstat
ko
remarks
armed
federal N
agency NO
booknbr 06000332
bookdttm 2006-07-25 15:11:00
arrdttm 2006-06-13 22:47:00
aj_id A000009455
casenbr 06008615
off1 624
off2
arrplace 113 JULIE DR
howarr V
juvstat
ko
remarks
armed
federal N
BULK INSERTを使用して、FIELDTERMINATORとROWTERMINATORの値を以下のように指定すると、正しい列にデータが挿入されます。唯一の欠点は、データに列名も含まれることです。これをクリーンアップする単純なカーソルとデータは正常に見えます。
すべてのデータ型が挿入時にVARCHARであるため、ステージングテーブルに挿入し、その後、クリーニング後に正しいデータ型を持つ最終的なデータテーブルに挿入することができます。
データを格納するテーブルを作成します。
CREATE TABLE dbo.SampleCSVTable
(
agency VARCHAR(255),
booknbr VARCHAR(255),
bookdttm VARCHAR(255),
arrdttm VARCHAR(255),
aj_id VARCHAR(255),
casenbr VARCHAR(255),
off1 VARCHAR(255),
off2 VARCHAR(255),
arrplace VARCHAR(255),
howarr VARCHAR(255),
juvstat VARCHAR(255),
ko VARCHAR(255),
remarks VARCHAR(255),
armed VARCHAR(255),
federal VARCHAR(255),
)
GO
データを一括挿入します。
BULK INSERT dbo.SampleCSVTable
FROM 'D:\SQLDATA\SQL01DEV\SampleData.csv'
WITH
(
FIELDTERMINATOR = '\n',
ROWTERMINATOR = '\n\n'
)
GO
データを消去します(このカーソルは各列をループし、挿入されたデータから列名を削除します):
DECLARE @ColName NVARCHAR(255),
@SqlCmd NVARCHAR(255)
DECLARE C1 CURSOR FOR
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'SampleCSVTable'
OPEN C1
FETCH NEXT FROM C1 INTO @ColName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SqlCmd = 'UPDATE dbo.SampleCSVTable SET [' + @ColName + '] = LTRIM(RTRIM(REPLACE([' + @ColName + '], ''' + @ColName + ''', '''')));'
EXEC sp_executesql @SqlCmd
FETCH NEXT FROM C1 INTO @ColName
END
CLOSE C1
DEALLOCATE C1
データをクエリします。
SELECT * FROM dbo.SampleCSVTable
結果:
agency | booknbr | bookdttm | arrdttm | aj_id | casenbr | off1 | off2 | arrplace | howarr | juvstat | ko | remarks | armed | federal
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
NO | 06000330 | 2006-07-19 10:56:00 | 2006-05-07 05:42:00 | A000009454 | 06006640 | 619 | 634 | DENNYS RESTAURANT | O | | | | | N
NO | 06000331 | 2006-07-24 12:11:00 | 2006-07-16 16:11:00 | A000003215 | 06010336 | 641 | | 219 W GLENCOVE AV | V | | | | | N
NO | 06000332 | 2006-07-25 15:11:00 | 2006-06-13 22:47:00 | A000009455 | 06008615 | 624 | | 113 JULIE DR | V | | | | | N