Transct-SQL中@的真正本质是什么

Ric*_*d77 0 sql sql-server-2008

我在Linq2SQL上阅读了一些旧的ScottGu博客.现在我正在做SPROC部分.我想知道@variable的确切含义是什么.

从ScottGu的博客中看到这一点

ALTER PROCEDURE dbo.GetCustomersDetails
(
  @customerID nchar(5),
  @companyName nvarchar(40) output
)
AS
SELECT @companyName = CompanyName FROM Customers
WHERE CustomerID = @customerID

SELECT *
FROM Orders
WHERE CustomerID = @customerID
ORDER BY OrderID
Run Code Online (Sandbox Code Playgroud)

我有点失落,因为到目前为止,我有任何事先以"@"作为用户输入的占位符.但是,在上面的例子中,看起来像'@companyName'被用作常规变量,例如在C#中(SELECT @companyName = ...).但是,@companyName还不知道.

那么,真正的本质是什么先于上面的"@"?一个变化?一个简单的占位符,以适应用户输入的值?

谢谢你的帮助

Red*_*ter 7

它只是一个变量.

请记住,存储过程可以具有输入输出参数.@companyName在这种情况下,是一个变量,它保存GetCustomersDetails调用过程时将输出的值(请注意output参数声明之后).

除了输出参数之外,此过程还返回结果集.如果愿意,您还可以选择设置返回代码,因此至少有三种方法可以从存储过程中返回可以同时使用的数据:输出参数,结果集和返回代码.