【问题标题】:BULK INSERT with variable file name in SET statement在 SET 语句中使用变量文件名进行 BULK INSERT
【发布时间】:2021-07-26 15:35:35
【问题描述】:

我正在尝试进行批量插入,但 @CSVPath 没有解析。

 declare @path varchar(255) 
 set @path = 'C\CSVPath.csv'; 

 BULK INSERT #mytable FROM @CSVPath <-- Error line
 WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ); 

我试过了

 FROM ''' + @CSVpath + '''

如果我硬编码它的工作路径。如果我将它全部包装在一个 SET 语句中并执行它就可以了。

 declare @sql varchar(max)
 set @sql = 'BULK INSERT #mytable FROM ''' + @CSVPath + ''' WITH ...
 exec (@sql)

但是,我不能这样做,需要第一种方法,但它似乎没有解决,无法弄清楚如何让它工作。

【问题讨论】:

标签: sql sql-update bulkinsert


【解决方案1】:

正确运行查询动态时,编译器存储变量的值,但通常不会通过变量命名表或地址。

 BULK INSERT #mytable
 FROM 'C:\test.csv'
 WITH
 (
    FIRSTROW = 2, -- as 1st one is header
    FIELDTERMINATOR = ',',  -- field delimiter
    ROWTERMINATOR = '\n',   -- next row
    TABLOCK
 )

【讨论】:

  • 这不起作用。我需要它是一个变量。而不是静态的。为什么构建插入不允许这样做?
  • 我编辑了答案并在答案中陈述了我的推论。
猜你喜欢
  • 2017-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 2022-09-23
相关资源
最近更新 更多