使用 GO 更改表会导致语法错误

Alter table with GO results in syntax error

提问人:paolov 提问时间:5/12/2023 最后编辑:Salman Apaolov 更新时间:5/17/2023 访问量:313

问:

我已经为这个错误挠头了一段时间。

以下脚本:

alter table t alter column c int
GO

错误结果:

Incorrect syntax near 'GO'.

我主要想要的是将此脚本嵌入到较长的脚本中,因此需要在脚本的其余部分继续之前执行事务。我也尝试过带分号和不带分号,这没有区别。

我将不胜感激任何善意的指导。

SQL Server 2016 和 2019 中出现相同的错误。我正在 SSMS 中以交互方式运行 SQL。该表的存在不会对错误产生任何影响。我已经尝试过以下DDL:

create table t (c float)

截图在这里。enter image description here

screenshow 与 SELECT 然后 GO 显示使用 GO 的其他语句工作正常。enter image description here

sql-server windows t-sql 语法错误

评论

0赞 Samuel Liew 5/12/2023
评论已移至聊天室;请不要在这里继续讨论。在在此下方发表评论之前,请查看评论的目的。不要求澄清或提出改进建议的评论通常属于 Meta Stack Overflow 或 Stack Overflow Chat 中的答案。继续讨论的评论可能会被删除。
1赞 Joel Coehoorn 5/15/2023
需要理解的一件事是,它实际上不是SQL语言的一部分。它是由你使用的任何工具提供的批处理分隔符,而不是由 SQL Server 本身处理或发送到 SQL Server 本身的内容。如果特定工具不知道此分隔符,则会导致语法无效。此外,即使在 SSMS(这是最常用的地方)中,批处理分隔符也是可配置的。你可以把它改成别的东西。GO

答:

-1赞 Parth M. Dave 5/12/2023 #1

在我看来,您的代码是正确的。只需尝试删除评论,并确保没有可用空间。GO

ALTER TABLE t ALTER COLUMN c int;
GO
ALTER TABLE t ALTER COLUMN c int;
GO

评论

0赞 Dale K 5/12/2023
查看评论,您会发现 OP 已经完成了所有这些选项。
0赞 Parth M. Dave 5/12/2023
只是让我知道我所说的是在评论中定义?
0赞 Lev Gelman 5/14/2023
分号就够了,只需删除 GO
4赞 Salman A 5/15/2023 #2

我能够使用使用 Macintosh 行尾(CR 而不是 CR LF 或 LF)的 SQL 文件重现该问题:

The document opened in Notepad++

Query opened and executed in SSMS

解决方案是将行结尾转换为 Windows,如此处所述

评论

0赞 paolov 5/17/2023
问题不是由于行尾 OP 在 Windows 上。ALTER TABLE t ALTER COLUMN 与 ALTER TABLE t ADD 或其他更改列计数的 DDL 语句之间显然存在差异。前者错误与语法错误,如果你在它后面放一个 GO。后者不会出错,实际上需要 GO。否则,则会出现其他错误。
0赞 Salman A 5/17/2023
没有人能够重现您面临的问题(请参阅聊天中的评论)。最接近的是更改 SSMS 中的批处理分隔符,但这会导致下面的红色波浪线和你提到的错误,但你说情况并非如此。换行问题是我得到的最接近的问题。GO
0赞 paolov 5/17/2023
编写带有批处理分隔符 (GO) 的 ALTER TABLE t ALTER COLUMN 语句和带有批处理分隔符 (GO) 的 ALTER TABLE ADD COLUMN 语句,以及这两个语句后跟一个 INSERT 语句是否可以为您编译和执行?即 ALTER 后跟 INSERT,中间有 GO。
0赞 Salman A 5/17/2023
是的,确实如此......
0赞 paolov 5/17/2023
你真的都试过了吗?并且既编译又运行?你有截图吗?