使用CSV更新预先存在的SQL Server表中的记录

时间:2018-01-11 16:34:39

标签: sql-server

我的SQL Server 2012表格为CUST_TABLE。它已经有很多客户记录(超过10,000)。

我有一个CSV,第一列客户编号是我的主键。第二列有电子邮件地址。此CSV的第一行包含标题为custnum和email的列。 CSV有125个数据行。我正在使用SSMS,只想更新125个客户记录并更改他们的电子邮件。

我找到的唯一解决方案是使用更新语句来更改数据。还有其他更简单的方法吗?就像使用导入数据功能一样,右键单击数据库,然后将鼠标悬停在任务上。谢谢。

1 个答案:

答案 0 :(得分:0)

将csv读入临时表,然后使用临时表更新表。

例如:

USE yourdb;

GO

IF OBJECT_ID('tempdb.dbo.#tmp', 'U') IS NOT NULL
    DROP TABLE #tmp;

GO

CREATE TABLE #tmp (
    t_cust_nr   NVARCHAR(MAX),
    t_email     NVARCHAR(MAX)
)

SET NOCOUNT ON;

-- Read the csv, skip the first row
BULK INSERT #tmp 
    FROM 'C:\path\to\your.csv' 
    WITH (FIRSTROW = 2, FIELDTERMINATOR = ',', ROWTERMINATOR ='\n');

-- Trim whitespace
UPDATE #tmp
    SET t_cust_nr = LTRIM(RTRIM(t_cust_nr)),
        t_email = LTRIM(RTRIM(t_email));


-- Add your update statement here... 
-- You also might have to cast the t_cust_nr to a diff. data type if needed.


SET NOCOUNT OFF;

DROP TABLE #tmp;