根据CSV SQL中的批量插入更新列

时间:2015-05-29 04:13:07

标签: sql sql-server csv

我正在尝试根据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

更新记录

感谢任何帮助。

2 个答案:

答案 0 :(得分:6)

假设您只有110个记录插入临时表,而且这些ID在Interpreters表中是唯一的,那么这个语法应该是这样的

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

您的查询无法正常工作的原因是因为它试图更新Interpreters表中的每个数字。如果与临时表匹配,那么这就是您所需要的。但是当没有匹配时,您的查询将返回NULL,导致不匹配的记录更新为NULL

答案 1 :(得分:0)

Bigip_devices = {
    main_hub = {
      region             = "eastus"
      azs                = ["1"]            #Azure availabilty zones
      vnet_name               = "vnet-main"   # Vnet name to deploy to
      bigip_instance_count = 2            # Number of instnaces to delpoy
      cluster             = "yes"         # Deploy as a cluster or stand alone device
      version             = ""            # Leave blank for default value
      sku                 = ""            # Leave blank for default value - f5-bigip-virtual-edition-25m-best-hourly
      offer               = ""            # Leave blank for default value - f5-big-ip-best
      instance_type       = ""            # Leave blank for default value - Standard_DS3_v2
      disable_password_authentication = ""     #Leave blank for default value
      tags                = ""
    }
    spoke = {
      region             = "eastus"
      azs                = ["1","2"]            #Azure availabilty zones
      vnet_name               = "vnet-spoke"   # Vnet name to deploy to
      bigip_instance_count = 4            # Number of instnaces to delpoy
      cluster             = "yes"         # Deploy as a cluster or stand alone device
      version             = ""            # Leave blank for default value
      sku                 = ""            # Leave blank for default value - f5-bigip-virtual-edition-25m-best-hourly
      offer               = ""            # Leave blank for default value - f5-big-ip-best
      instance_type       = ""            # Leave blank for default value - Standard_DS3_v2
      disable_password_authentication = ""     #Leave blank for default value
      tags                = ""
    }
  }