2015-05-29 43 views
4

我試圖根據CSV文件更新表格。我有CSV列表的ID和修剪號碼,我需要根據SQL表格中的特定ID更新修剪號碼。基於CSV的批量插入更新列SQL

到目前爲止劇本我寫

-- 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 

這一個返回受影響的1824行甚至認爲CSV文件只得到了110條記錄。我只想用特定的SAPInterpreterID更新記錄

任何幫助表示讚賞。

+0

我得到110條記錄,是的,ID是唯一的。 –

+0

我只是好奇..甚至我執行的查詢更新相關記錄,似乎工作正常。但它顯示更新記錄的數量不正確。你知道爲什麼會發生這種情況嗎? –

+0

其實我的CSV文件已經從實際的表中獲得了一組記錄。這是一對一的。但是當我在解釋器上運行我的查詢時,它們不在csv中,但在SQL表中有修剪號。注意到通過運行該查詢,修剪號被設置爲空。它可能會把整個事情搞砸在現場服務器上。你救了我的生命..乾杯:) –

回答

6

假設你只能得到110條記錄插入到臨時表和ID是在口譯表獨特的,那麼這是如何你的語法應該像

UPDATE i 
SET TrimNumber = tempintr.TempTrimNumber 
FROM Interpreters AS i INNER JOIN 
    #InterpreterTrimNumbers tempintr 
    ON i.TrimNumber= tempintr.TempTrimNumber 

您的查詢沒有工作的原因因爲它試圖更新解釋器表中的每一個數字。當與臨時表匹配時,那麼這就是你需要的。但是當沒有匹配時,您的查詢將返回NULL,導致不匹配的記錄更新爲NULL