【问题标题】:Bulk insert file path as stored procedure parameter批量插入文件路径作为存储过程参数
【发布时间】:2014-12-20 18:41:25
【问题描述】:

我正在尝试创建一个从CSV 导入的存储过程。如果我有一个硬编码的文件路径,一切正常,但我想将文件路径作为参数。当我尝试 SQL Sever Management Studio 时会生成错误:

“@filePath”附近的语法不正确。

(事实上,如果我放的不是纯字符串(例如'C:'+'/dir'),就会出错。)

这是我的代码的简化版本:

Create procedure [importFile](@filePath varchar(Max))
AS
BEGIN
    create table #Temp
    (
      row1 int,
      row2 varchar(5),
      row3 bit
    )
    BULK insert
      #Temp
      from @filePath
      With(
        FIELDTERMINATOR = ',',
        ROWTERMINATOR = '\n'
      )
    ...
END

有什么解释吗?

【问题讨论】:

标签: sql-server tsql stored-procedures sql-server-2012 bulkinsert


【解决方案1】:

使用动态 SQL 将文件名变量注入到带有批量插入语句的字符串中,并使用 sp_executesql 执行它。您可能需要添加一些错误检查来检查路径是否有效等等。

CREATE PROCEDURE [importFile] (@filePath VARCHAR(MAX))
AS
BEGIN
    CREATE TABLE #Temp
    (
      row1 int,
      row2 varchar(5),
      row3 bit
    )

    DECLARE @SQL NVARCHAR(MAX) = ''
    SET @SQL = N'
    BULK INSERT #Temp
      FROM ''' + @filePath + '''
      WITH (
        FIELDTERMINATOR = '','',
        ROWTERMINATOR = ''\n''
      )'

     -- ...

     EXEC sp_executesql @SQL
END

-- to run it:
EXEC importFile 'd:\test.csv'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 2021-10-14
    • 2020-10-04
    • 1970-01-01
    相关资源
    最近更新 更多