какова истинная природа @ в Transct-SQL - PullRequest
0 голосов
/ 21 апреля 2010

Я читал несколько старых блогов ScottGu на Linq2SQL.Сейчас я делаю часть 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

Я немного растерялся, поскольку до сих порвсе, что предшествует '@' в качестве заполнителя для пользовательского ввода.Но в приведенном выше примере это выглядит так: '@ companyName' используется как обычная переменная, как, например, в C # ( SELECT @companyName = ... ).Но @companyName еще не известно.

Итак, какова истинная природа чего-то, которому предшествует символ @, как выше?привлекательный?простой заполнитель для размещения введенного пользователем значения?

Спасибо за помощь

Ответы [ 2 ]

7 голосов
/ 21 апреля 2010

Это просто переменная.

Помните, что хранимые процедуры могут иметь параметры input и output . @companyName в этом случае - переменная, содержащая значение, которое будет выводиться при вызове процедуры GetCustomersDetails (обратите внимание на output после объявления параметра).

Эта процедура также возвращает набор результатов в дополнение к выходному параметру. У вас также есть возможность установить код возврата , если вы хотите, поэтому есть как минимум три способа возврата данных из хранимой процедуры , которые могут использоваться одновременно: выходные параметры, наборы результатов и коды возврата.

1 голос
/ 21 апреля 2010

см. Встроенные комментарии:

ALTER PROCEDURE dbo.GetCustomersDetails
(
  @customerID nchar(5),            --input parameter to stored procedure
  @companyName nvarchar(40) output --output parameter to stored procedure, can be changed by the procedure and the value retrieved by the caller
)
AS
SELECT @companyName = CompanyName FROM Customers  --set the output parameter as the last row from this query
WHERE CustomerID = @customerID  --use the input parameter to filter the query

SELECT *
FROM Orders
WHERE CustomerID = @customerID  --filter this query on the input parameter 
ORDER BY OrderID

Вы можете объявлять локальные переменные, они не просто параметры хранимых процедур:

DECLARE @localVariable int     --integer local variable
       ,@Another       char(1) --multiple on one DECLARE

обычно @@ .... являются системными значениями, такими как @@ ROWCOUNT и @@ SPID, но вы можете делать такие сумасшедшие вещи, как:

DECLARE @@@@wtf        int   --this is valid, and works
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...