我使用的是 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 2008)@@ 用于函数名称,因此 @@ 不应用作参数名称。
在线书籍参考 http://msdn.microsoft.com/en-us/library/ms187953.aspx
如果有其他问题评论我:)
其他用户不正确,他们不完全相同。
CREATE PROCEDURE [dbo].[JustWriteLetter]
@@letter1 nvarchar(1) = 'A',
@letter2 nvarchar(1) = 'B'
AS
BEGIN
SELECT @@letter1,@letter2
END;
当您运行此代码并刷新参数时...您将得到这个。有关第一个参数如何没有默认值(尽管有默认值)的富有洞察力的消息。
但是当您在没有参数的情况下运行该过程时......
因此,当您将 @@ 与默认参数一起使用时,SQL 只是...好吧,会在有默认参数的问题上对您撒谎...这是一个错误,也是一个功能。