"Incorret syntax near..." 使用 SQLCMD 运行 SQL 文件时出错

"Incorret syntax near..." error when running SQL file using SQLCMD

我在 MSDN 上找到了这个命令。但它会抛出语法错误。 有没有我遗漏的关键字?我已经阅读了很多论坛,但找不到解决方案。我还访问了 MSDN 上的指南。但什么也没发生。

 sqlcmd -S SERVER\SQL2008R2 -i sqlfile.sql

你的 sqlcmd 看起来不错。

错误消息与 sqlfile.sql 中的 SQL 有关!

为了证明这一点,将文件的内容更改为非常简单的内容,例如

SELECT 'Success!' As result

然后 运行 再次执行 sqlcmd 命令。

您需要 运行 在 Command Prompt 而不是在 sqlcmd 内:

sqlcmd -S SERVER\SQL2008R2 -U UserName -P Password -i sqlfile.sql

C:\>sqlcmd -S SERVER\SQL2008R2 -U UserName -P Password -i sqlfile.sql

这可能是由 SQLCMD 编辑器中 TSQL 语句块注释中的单引号引起的。这可能是一个错误,因为普通 SQL Editor

不会出现此问题

要确认这一点,请在 SSMS 中单击“新建查询”以打开 SQL 编辑器。 类型 :连接Hostname\SQLInstance
将 Hostname\SQLInstance 替换为命名实例的值,或者如果您使用默认的 SQLInstance.

,则仅替换主机名

通过单击查询菜单并选择 SQLCMD 模式切换到 SQLCMD 模式。

您应该会看到您输入的 :CONNECT 文本变为灰色背景。

这确认您现在正在使用 SQLCMD editor/parser。

将以下内容粘贴到 :CONNECT 语句下方,替换为您拥有相应权限的有效数据库名称。

使用 开始

创建视图 [dbo].vw_Test AS ///* 让我们测试在块注释中使用单引号。 //*/ SELECT 1 + 1 作为简单求和; 走 打印 'View vw_Test created'

现在,尝试编译视图,例如通过单击 F5 键。您将收到与此类似的错误消息。

正在连接到... 消息 102,级别 15,状态 1,过程 vw_Test,第 16 行 'GO' 附近的语法不正确。 正在断开与 ...

的连接

如果您通过更改删除单引号: 让我们测试一下 到 让我们测试一下

..您收到一条健康信息:

正在连接到... 视图 vw_Test 已创建 正在断开与 ...

的连接

当您使用 sqlcmd 到 运行 多个外部 sql 文件时,您可能还会遇到同样的问题,即单独的文件在 SSMS 中编译没有问题,但是当从sqlcmd...它抱怨。