SQL Server 2008 R2中@@和@的区别

问题描述 投票:0回答:2

我使用的是 SQL Server 2008 R2。

我的问题是使用@和@@声明变量有什么区别

在 SQL Server 2008 R2 中:

示例

语法1:

Declare @a int = 1

select @a;

语法2:

Declare @@a int = 1

select @@a;

两者都在这里做同样的工作。那为什么要使用双@@呢?

sql-server sql-server-2008-r2
2个回答
7
投票

没有什么区别。变量的规则规定它们以“@”字符开头并遵循标识符的规则。

由于“@”是有效的标识符字符,因此您可以在变量名称的开头添加任意多个字符。但是,如果您匹配与变量同名的系统函数,则查询将无法编译。

在 SQL Server 的早期版本中,@ 描述局部变量,@@ 描述全局变量。现在(SQL 2008)@@ 用于函数名称,因此 @@ 不应用作参数名称。

在线书籍参考 http://msdn.microsoft.com/en-us/library/ms187953.aspx

如果有其他问题评论我:)


0
投票

其他用户不正确,他们不完全相同。

CREATE PROCEDURE [dbo].[JustWriteLetter]
    @@letter1 nvarchar(1) = 'A',
    @letter2 nvarchar(1) = 'B'
AS
BEGIN
   SELECT @@letter1,@letter2
END;

当您运行此代码并刷新参数时...您将得到这个。有关第一个参数如何没有默认值(尽管有默认值)的富有洞察力的消息。

但是当您在没有参数的情况下运行该过程时......

它以意想不到的、预期的方式起作用。

因此,当您将 @@ 与默认参数一起使用时,SQL 只是...好吧,会在有默认参数的问题上对您撒谎...这是一个错误,也是一个功能。

© www.soinside.com 2019 - 2024. All rights reserved.