在 SQL Server Management Studio 中读取 CSV 并执行 SQL

use*_*200 5 sql-server-2012 csv

是否可以在 SQL Server Management Studio 中读取 CSV 并每行执行 SQL 更新?

例子

数据.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 中完成吗?

Mon*_*nor 5

您可以为此使用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.
)
Run Code Online (Sandbox Code Playgroud)

如果您从 SQL Management Studio 导出 CSV,则需要做一些准备工作:

  1. 该文件应转换为 UTF-16。
  2. 所有NULLs 都应替换为空字符串。

这是一个Powershell脚本:

Get-Content .\orders_raw.csv -Encoding UTF8 | % { $_ -replace "NULL","" } | Out-File ".\orders.csv" 
Run Code Online (Sandbox Code Playgroud)

  • 这取决于文化。在某些文化中,“,”是小数点分隔符,因此“;” 是一个更安全的选择。 (2认同)

小智 -1

您可以参考以下链接了解如何在SQL Server中读取csv文件:

http://www.sqlservercentral.com/blogs/powersql-by-prashanth-jayaram/2015/02/09/t-sql-read-csv-files-using-openrowset/

在此基础上,您将能够将 csv 数据作为表格使用,然后您可以根据需要创建更新查询。