web-dev-qa-db-ja.com

SQL Server Management StudioでCSVを読み取り、SQLを実行する

SQL Server Management StudioでCSVを読み取り、1行ごとにSQL更新を実行することは可能ですか?

data.csv

"column1","column2,"column3" "column1","column2,"column3" "column1","column2,"column3" "column1","column2,"column3" "column1","column2,"column3"

次のような各行のデータに基づいてSQL更新を実行したい

UPDATE [data].[orders] set order_number = $column1, something_else = $column2 where order = $column3

これはSQL Server Management Studioで実行できますか?

3
user598200

そのために BULK INSERT を使用できます。

CREATE TABLE #orders (
  Column1 int,
  Column2 nvarchar(max),  
  Column3 datetimeoffset
)

BULK INSERT #orders
FROM 'X:\orders.csv'
WITH
(
  FIRSTROW = 1,
  DATAFILETYPE='widechar', -- UTF-16
  FIELDTERMINATOR = ';',
  ROWTERMINATOR = '\n',
  TABLOCK,
  KEEPNULLS -- Treat empty fields as NULLs.
)

SQL Management StudioからCSVをエクスポートした場合、いくつかの準備が必要です。

  1. ファイルはUTF-16に変換する必要があります。
  2. すべてのNULLsは空の文字列に置き換える必要があります。

そのためのPowerShellスクリプトを次に示します。

Get-Content .\orders_raw.csv -Encoding UTF8 | % { $_ -replace "NULL","" } | Out-File ".\orders.csv" 
3
Monsignor

これを行う簡単で簡単な方法は、csvをテーブルにインポートしてから、操作/表示することです。 tsqlを使用する代わりにグラフィカルな方法を使用したい場合。データベースを右クリックして[タスク]を選択し、[データのインポート]を選択します。

3
Jason B.

可能性があります SSMS:Excelからデータをインポート(コピー/貼り付け)する方法 が役立ちます(BULK INSERTを使用したくない場合、またはその権限がない場合)。

1
Denis