【问题标题】:"Unclosed quotation mark after the character string 'FieldN" error in sql file insertsql文件插入中的“字符串'FieldN”后的未闭合引号
【发布时间】:2015-05-08 13:57:33
【问题描述】:

我正在使用sqlcmd -S 命令从具有架构和数据值的大型.sql 文件进行插入。插入操作开始后,中间出现错误

消息 102,级别 15,状态 1,服务器 My-PC\SQLEXPRESS,第 39 行
字符串FieldN后的非右引号

我无法打开文件(因为它太大而无法打开)并修复导致错误的行中的引号,但想知道我们是否可以跳过与未闭合引号相关的这些行?

【问题讨论】:

  • 这不是您的源文件,而是您的查询。如果您使用的是动态 sql,则缺少允许它解析的引号。您是否能够检查 sql 是如何构建的,并对其进行编辑以添加(可能)右引号?
  • 数据库脚本(架构和数据)是使用 SSMS 向导自动生成的,当我尝试运行脚本来创建数据库并插入数据时,出现此错误。
  • @Downvoter 评论并帮助我纠正问题。
  • 无法编辑创建/插入脚本?您的问题肯定与用于插入的动态 SQL 有关。仔细考虑之后,可能是您的某个数据值中有一个撇号。在这种情况下,您可以转义撇号,或使用参数。无论哪种方式,您都需要编辑这些脚本。
  • @Closing-voter 三个人正在就这个问题进行交流,我相信这对那些试图理解和帮助的人来说是有意义的

标签: sql sql-server


【解决方案1】:

这可能是很多事情。看不到代码,我建议从两个地方开始:

  1. 文件中的 SQL 格式不正确,需要进行编辑以在 INSERT 的某处包含右引号。行号在错误中并不总是具体的,但是,从它给你的行号或附近开始。
  2. 您的一个或多个数据值包含需要转义的撇号。再次,从它给你的行号附近开始。

无论哪种情况,您都需要编辑您的 \script.sql 文件来解决此问题。

编辑

最终,您需要编辑此脚本,或创建一个新脚本。如果您决定重新滚动此脚本,您将需要尝试添加文本限定符。我不确定您的数据集来自哪里,但需要在运行之前捕获它。

如果你不能重新生成脚本,那么你必须想办法打开它。没有办法解决这个问题。它被埋在那个脚本中,在修复之前它不会成功触发。

【讨论】:

  • 我理解这个问题,理想情况下会转义引号,但问题是我无法打开文件并找到该行,因为文件很大
  • 描述巨大的尺寸。第 39 行,如果接近准确的话,应该不难找到。您也可以在文本编辑器中打开它,这可能会有所帮助。我经常在 Notepad++ 中处理大小为 100k 或更多的文件,没有问题。
  • 文件大小为 4.6 Gb,没有一个编辑器能够打开它
  • 是的,这很粗糙。您总是可以尝试拆分它:superuser.com/questions/94083/… 尽管我不建议这样做,因为我认为它不尊重换行符。您可以重新创建此脚本以包含文本限定符吗?是否绝对有必要在同一脚本中包含架构 and 数据?之后:我相信写字板最多可以打开 9GB 的文件,虽然速度很慢。
  • 试试记事本++看看是否能打开文件。不打开文件不是一种选择。
【解决方案2】:

sql cmd 分段处理 sql 命令。它适用于流 - 读取一些数据,处理它,然后再处理下一组数据,直到文件结束。如果不指定一次处理的数据量,只需要4096字节,如果sql查询串比较大,就会出现“字符串后引号未闭合”的错误。考虑 -a 参数,例如: sqlcmd -s 服务器 -a DATATOBEPROCESSEDATONCE -u 用户名 -p 密码 -i “文件路径”。 将 DATATOBEPROCESSEDATONCE 设置为 32767。

【讨论】:

    猜你喜欢
    • 2017-02-27
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多