【发布时间】:2015-05-29 04:13:06
【问题描述】:
我正在尝试根据 CSV 文件更新表格。我有 CSV 中的 ID 和修剪编号列表,我需要根据 SQL 表中的特定 ID 更新修剪编号。
到目前为止我写的脚本
-- Create a temporary table for the import
drop table #InterpreterTrimNumbers
CREATE TABLE #InterpreterTrimNumbers(
[SAPInterpreterId] int,
TempTrimNumber varchar(100)
)
BEGIN TRANSACTION
-- Bulk import into the temporary table
BULK INSERT #InterpreterTrimNumbers FROM 'C:\CSVData\Trim numbers.csv' WITH (
FIRSTROW = 2,
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n',
ERRORFILE = 'C:\CSVData\Trim numbers-errors.csv',
TABLOCK
)
update Interpreters set TrimNumber = (select TempTrimNumber from #InterpreterTrimNumbers where #InterpreterTrimNumbers.SAPInterpreterId = Interpreters.SAPInterpreterID )
Commit Transaction
即使 CSV 文件只有 110 条记录,这也会返回 1824 行受影响的行。我只想用特定的 SAPInterpreterID 更新记录
感谢任何帮助。
【问题讨论】:
-
我有 110 条记录,是的,ID 是唯一的。
-
我只是好奇..即使我执行的查询更新了相关记录并且似乎工作正常。但它显示更新的记录数不正确。你知道为什么会这样吗?
-
实际上我的 CSV 文件已经从实际表中获得了子记录集。而且是一对一的。但是当我在解释器上运行我的查询时,它不在 csv 中但在 SQL 表中有修剪数字。注意到通过运行该查询将修剪编号设置为空。它可能在实时服务器上搞砸了整个事情。你救了我的命..干杯:)
-
很高兴它有帮助。现在这是有道理的。您拥有的语法将更新每个数字。 = 后面的查询如果有匹配则选择一个 id,如果没有匹配则选择 NULL。因此,将不匹配的记录更新为 null。
标签: sql sql-server csv