Sql server &引用;宣布;“之前的条款;“开始”;CREATE过程中的子句
我想知道在存储过程中声明变量的这两个选项之间是否有任何区别?有什么缺点吗Sql server &引用;宣布;“之前的条款;“开始”;CREATE过程中的子句,sql-server,Sql Server,我想知道在存储过程中声明变量的这两个选项之间是否有任何区别?有什么缺点吗 CREATE PROCEDURE dbo.HelloWorld AS DECLARE @message NVARCHAR(30) BEGIN SET @message = 'Hello World!' SELECT @message END GO CREATE PROCEDURE dbo.HelloWorld2 AS BEGIN DECLARE @message NVARCHAR(30)
CREATE PROCEDURE dbo.HelloWorld
AS
DECLARE @message NVARCHAR(30)
BEGIN
SET @message = 'Hello World!'
SELECT @message
END
GO
CREATE PROCEDURE dbo.HelloWorld2
AS
BEGIN
DECLARE @message NVARCHAR(30)
SET @message = 'Hello World!'
SELECT @message
END
GO
没有真正的区别基本上第一个和写这个一样:
CREATE PROCEDURE dbo.HelloWorld
AS
BEGIN
DECLARE @message NVARCHAR(30)
BEGIN
SET @message = 'Hello World!'
SELECT @message
END
END
GO
AS后有一个隐含的代码块
cf没有真正的区别基本上第一个与写这篇文章相同:
CREATE PROCEDURE dbo.HelloWorld
AS
BEGIN
DECLARE @message NVARCHAR(30)
BEGIN
SET @message = 'Hello World!'
SELECT @message
END
END
GO
AS后有一个隐含的代码块
cf无差异。存储过程主体只是零个或多个TSQL语句,并在包含CREATE过程的批处理结束时终止:结束该过程的是
GO
,而不是end
。这就是为什么CREATE PROCEDURE必须是批处理中的唯一语句
存储过程主体周围的BEGIN..END
是一种纯粹的常规做法,但强烈建议采用这种做法
如果您想在
BEGIN..END
块之前实现一个具有向前声明变量的模式,您可以。但是没有必要在顶部声明所有变量,而且在不需要前向声明的语言中,它通常被认为是糟糕的形式。没有区别。存储过程主体只是零个或多个TSQL语句,并在包含CREATE过程的批处理结束时终止:结束该过程的是GO
,而不是end
。这就是为什么CREATE PROCEDURE必须是批处理中的唯一语句
存储过程主体周围的BEGIN..END
是一种纯粹的常规做法,但强烈建议采用这种做法
如果您想在
BEGIN..END
块之前实现一个具有向前声明变量的模式,您可以。但是没有必要在顶部声明所有变量,而且在不需要前向声明的语言中,它通常被认为是糟糕的形式。没有区别<代码>开始应在之后,但不强制执行。您也可以在不使用BEGIN…END
的情况下编写语句。就我个人而言,我会在BEGIN
之后做,因为它看起来很奇怪。我倾向于将BEGIN
和END
视为类似于C#中的{
和}
,并且我不会将变量声明放在方法体中,在方法体之外没有区别<代码>开始
应在之后,但不强制执行。您也可以在不使用BEGIN…END
的情况下编写语句。就我个人而言,我会在BEGIN
之后做,因为它看起来很奇怪。我倾向于将BEGIN
和END
视为类似于C#中的{
和}
,并且我不会将方法体中使用的变量声明放在方法体之外