Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server &引用;宣布;“之前的条款;“开始”;CREATE过程中的子句_Sql Server - Fatal编程技术网

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#中的
{
}
,并且我不会将方法体中使用的变量声明放在方法体之外