Sql 执行一个命令字符串,末尾带有GO

Sql 执行一个命令字符串,末尾带有GO,sql,sql-server,Sql,Sql Server,我需要在末尾使用GO命令执行一个命令字符串,如 exec('SELECT * FROM tblTmp where Id = 1 GO') 执行后我有 “GO”附近的语法不正确 如果执行exec('SELECT*FROM tblTmp GO') 这里有什么问题 谢谢。一条SQL语句不需要使用GO。只有在将多个语句批处理到单个脚本中时,才需要使用分隔符。此外,如果以编程方式执行这些语句,则应该使用分号(;)语句终止符,而不是去分隔SQL语句 这里有一个方便的方法。GO不是一个SQL命令,它是一个批

我需要在末尾使用GO命令执行一个命令字符串,如

exec('SELECT * FROM tblTmp where Id = 1 GO')
执行后我有

“GO”附近的语法不正确

如果执行
exec('SELECT*FROM tblTmp GO')

这里有什么问题


谢谢。

一条SQL语句不需要使用GO。只有在将多个语句批处理到单个脚本中时,才需要使用分隔符。此外,如果以编程方式执行这些语句,则应该使用分号(;)语句终止符,而不是去分隔SQL语句


这里有一个方便的方法。

GO
不是一个
SQL
命令,它是一个批处理分隔符,可以被诸如
osql
sqlcmd
SSMS
之类的客户机理解,但不是引擎本身

如果您在
SSMS
中编写类似的内容:

SELECT  1
GO
SELECT  2
GO
,引擎发送两个批,每个批中包含一条语句,而不是一个批中包含两条语句

在第二个查询中,
GO
被视为表
tblTmp
的别名


只需从查询中删除
GO

GO
分离批次,而
分隔语句。对于大多数语句(
,其中
MERGE
是显著的例外),您甚至不需要分号。比如说:
EXEC('SELECT 1 SELECT 2')
即使没有分号也能很好地工作。@Quassnoi:稍微修改了我的措辞,并添加了一个链接,指向关于该主题的精彩讨论。关于分号的使用,似乎有两种观点,但是,我遇到过这样的情况:在单独的语句中添加分号会产生不同的效果。使用非常复杂,多语句T-SQL脚本在客户端组装并推送到服务器进行处理。我希望我能回忆起更详细的细节,但我没有。正如我所说,
WITH
MERGE
是最显著的例外,还有很多不太显著的例外。我如何使用exec(“…”)发送批处理?@Vyacheslav:通过将批处理文本作为参数提供给
exec
,而不带尾随的
GO
。您不能在一个
EXEC
中发送多个批次。