【问题标题】:Syntax error when executing OPENROWSET Command执行 OPENROWSET 命令时出现语法错误
【发布时间】:2021-11-02 21:05:02
【问题描述】:
SET @fullPath = 'D:\Hosting\Project\Content\Order\ImportTest.txt'

SET @command = N'select @data_count =(select len(BulkColumn) - len(replace(BulkColumn, 
char(10), '')) + 1
from OPENROWSET(BULK ''' + @fullPath + ''',
SINGLE_CLOB) ROW_SET'

EXEC(@command)

上面的命令产生以下错误:

消息 102,第 15 级,状态 1,第 2 行
'D:' 附近的语法不正确。

消息 105,第 15 级,状态 1,第 2 行
字符串 ', SINGLE_CLOB) ROW_SET' 后面的非右引号。

如何解决上述问题?

【问题讨论】:

  • 我该如何解决上述问题? 您无法解决您看不到的问题。要调试动态 sql,您必须打印或选择代码生成的字符串,以便实际检查查询,查看不正确的语法,然后修复代码。

标签: sql-server tsql


【解决方案1】:

就像您在 BULK ''' + @fullPath + ''' 中转义了单引号一样,您必须在此处执行此操作:char(10), ''''

【讨论】:

    【解决方案2】:

    除了双引号,您还需要正确使用QUOTENAME转义文件名

    SET @fullPath = 'D:\Hosting\Project\Content\Order\ImportTest.txt';
    
    SET @command = N'
    select
      @data_count = len(BulkColumn) - len(replace(BulkColumn, char(10), '''')) + 1
    from OPENROWSET(BULK ' + QUOTENAME(@fullPath, '''') + ',
                  SINGLE_CLOB) ROW_SET
    ';
    
    EXEC sp_executesql @command;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      • 1970-01-01
      • 2013-10-07
      相关资源
      最近更新 更多