【问题标题】:SSIS: "Incorrect syntax near 'GO'." errorSSIS:“'GO'附近的语法不正确。”错误
【发布时间】:2013-03-28 20:39:23
【问题描述】:

我在针对 SQL Server 2012 数据库运行的 Visual Studio 2012 中使用 SSIS。使用 OLE DB Source 时出现如下所示的错误。此 OLE DB 源正在执行类似于下面进一步显示的 SQL。当我删除最后的 GO 语句时,SSIS 包执行正常。

在 SQL Server Management Studio 中,无论 GO 语句是否存在,SQL 都可以正常执行。

OLE DB 源正在数据流任务中执行。

为什么这个 GO 在 SSIS 包中执行时会导致这个错误,应该怎么做?非常感谢。

错误:

[来自 SQL 变量 [33] 的 OLE DB 源] 错误:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码: 0x80040E14。 OLE DB 记录可用。资料来源:“微软 SQL 服务器本机客户端 11.0" Hresult:0x80040E14 说明: “无法准备声明。”。 OLE DB 记录可用。 来源:“Microsoft SQL Server Native Client 11.0”Hresult:0x80040E14 描述:“'GO' 附近的语法不正确。”。

SQL:

/* Test statement */
SELECT 'test' as N'test'
GO

【问题讨论】:

  • GO 不是有效的 TSQL 关键字。它仅被 SSMS 等客户端工具用作批处理分隔符。他们不会将GO 发送到 SQL Server 本身。

标签: ssis sql-server-2012 ole


【解决方案1】:

GO 是一个批处理终止符,如错误消息所示,在 OLE DB 源中使用它是不正确的。

【讨论】:

    【解决方案2】:

    您的 SQL 是:

    SELECT 'test' as N'test'
    GO
    

    GO 是一个命令行的东西 - 使用 OLE 将 SQL 传递到服务器时将其删除。
    试试这个:

    SELECT 'test' as N'test'
    

    【讨论】:

    • N 是有效的语法,但在这种情况下并不真正需要,因为别名只是使用 ASCII 字符。例如SELECT 'Foo' as N'☂' 工作正常。
    • @MartinSmith 好的,谢谢(从回答中删除)。我从未使用过 MSSQL。干杯。顺便说一句,好角色!
    【解决方案3】:

    您应该从脚本中删除所有“GO”,它会解决问题。

    查看这里了解更多信息:

    https://agilewebhosting.com/knowledgebase/63/SQL-Error-Incorrect-syntax-near-andsharp039GOandsharp039.html

    矩阵

    【讨论】:

      【解决方案4】:

      建议的最佳实践:使用分号作为 t-SQL 语句终止符。虽然在此版本的 SQL Server 中大多数语句不需要分号,但在未来的版本中将需要它。

      http://msdn.microsoft.com/en-us/library/ms177563.aspx
      

      【讨论】:

      • 有人能解释一下这个建议有什么问题吗? Microsoft(上面的链接)和所有 SQL Server 相关会议都建议在 SSIS 和其他地方的所有 t-sql 语句中使用分号。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 1970-01-01
      相关资源
      最近更新 更多