5

我将 SSMS v17.6 与 SQL Server Express v14.0.1000.169 一起使用。

当我运行以下DELETE语句时:

delete from foo
go

我得到错误:

'go' 附近的语法不正确。

但是如果我执行类似的SELECT语句:

select * from foo 
go

那么就没有错误了。

似乎任何不返回结果的语句都会发生错误。我已经检查了 SSMS 中的查询执行设置,并且批处理分隔符设置为去。似乎 SSMS 正在发送到它不应该做的服务器。

我在多台机器上看到过这个。

4

2 回答 2

0

我很想知道这是否是批处理中唯一的脚本?我怀疑您正在运行的代码之前的某个字符导致了问题。

有两种方法可以验证这一点:

  1. 在 SSMS 中打开一个新选项卡,输入delete from foo go并执行。
  2. 在语句之前添加一个终止符;delete from foo go

在那些情况下,错误是否仍然发生?

于 2018-05-21T11:20:41.140 回答
0

拿出 GO。这不是 T-SQL 语句,而是管理工作室的批处理断路器。

GO keyword is not T-SQL但是一个 SQL Server Management Studio 工件,它允许您将脚本文件的执行分批分开。即当您在 SSMS 中运行 T-SQL 脚本文件时,语句将分批运行,并由GO关键字分隔。

检查此链接SQL Server 实用程序语句 - GO了解更多详细信息。

如果你读到了,你会发现 sqlcmd 和 osql 也支持 GO。SQL Server 不理解 GO 关键字。

因此,如果您需要更好地删除表以使用 WHERE 条件,则 WHERE 子句指定应删除哪些记录。如果省略 WHERE 子句,表中的所有记录都将被删除。

基本删除语法:

DELETE FROM table_name
WHERE condition; 
于 2018-07-31T22:28:45.730 回答