4

我正在使用Microsoft SQL Azure (RTM) - 12.0.2000.8 Nov 29 2017 09:37:51 Copyright (C) 2017 Microsoft Corporationcompatibilty_level=120 并且当我运行此查询时

ALTER PROCEDURE SPCreateSession3
@a int,
@b int
AS
select count(*) as a from events where IDevent > @a;
select count(*) as b from sessions where IDsession > @b;
GO
exec SPCreateSession3 1, 1

它给了我错误Must declare the scalar variable @b。没有分号,它工作正常。看起来那;是某种GO命令。那么为什么很多人在这里建议,这;永远不会造成任何问题。我需要分号,因为我在现实中使用 MERGE 命令,这;是必要的。另外,如果我将查询包装在 BEGIN Block 中,例如

ALTER PROCEDURE SPCreateSession3
@a int,
@b int
AS
BEGIN
select count(*) as a from events where IDevent > @a;
select count(*) as b from sessions where IDsession > @b;
END
GO
exec SPCreateSession3 1, 1

然后,sql server 说incorrect syntax near ;. 由于分号又是一个问题。我错过了什么或分号真的应该归咎于此吗?当我需要使用分号而不会出现这两个错误时,有什么解决方法?

快照:错误

4

2 回答 2

1

这不是 Azure 问题。T-SQL 中的分号结束批处理(范围)。在分号之后,您将开始一个新批次(范围),并且在前一个批次中声明的任何变量都不再有效。在这方面,半色的作用与 GO 语句相同;它结束了一批语句。

于 2017-12-25T20:42:08.880 回答
1

作为此问题的解决方法,请使用 Microsoft SQL Operations Studio 作为 Linux 和 MAC 的替代查询编辑器。从这里下载。Operations Studio 不会有这个问题。

用户目前要求使 SQL Server Management Studio 成为跨平台工具,如您在此处所见。现在,您可以使用 Microsoft SQL Operations Studio。

于 2017-12-25T23:53:33.493 回答