Udostępnij za pośrednictwem


Transact-SQL Variables

A Transact-SQL Zmienna lokalna jest obiekt, który może zawierać jedną wartość określonego typu. Zmienne w instancjach i skrypty są zazwyczaj używane:

  • Jak policzyć ile razy pętla jest wykonywana lub określić, ile razy licznik pętli jest wykonywane.

  • Do przechowywania wartości danych do testowania instrukcja kontroli przepływu.

  • Aby zapisać wartość danych zwracanych przez procedura przechowywana zwracają wartość zwrotu kodu lub funkcja.

Uwaga

Nazwy niektórych Transact-SQL funkcje systemowe zaczynają się od dwóch na znaki (@@). Although in earlier versions of Microsoft SQL Server, the @@functions are referred to as global variables, they are not variables and do not have the same behaviors as variables.@@ Funkcje są to funkcje systemowe, a ich użycie składni następują reguły dla funkcji.

Poniższy skrypt tworzy tabela test małych i spowoduje 26 wierszy.Skrypt używa zmiennej wykonać trzy czynności:

  • Kontrolować, ile wierszy są wstawiane przez kontrolowanie, jak często jest wykonywane w pętli.

  • Należy podać wartość wstawiona do kolumna liczb całkowitych.

  • Działa jako część wyrażenie, która generuje liter ma zostać wstawiony do kolumna znaków.

-- Create the table.
CREATE TABLE TestTable (cola int, colb char(3));
GO
SET NOCOUNT ON;
GO
-- Declare the variable to be used.
DECLARE @MyCounter int;

-- Initialize the variable.
SET @MyCounter = 0;

-- Test the variable to see if the loop is finished.
WHILE (@MyCounter < 26)
BEGIN;
   -- Insert a row into the table.
   INSERT INTO TestTable VALUES
       -- Use the variable to provide the integer value
       -- for cola. Also use it to generate a unique letter
       -- for each row. Use the ASCII function to get the
       -- integer value of 'a'. Add @MyCounter. Use CHAR to
       -- convert the sum back to the character @MyCounter
       -- characters after 'a'.
       (@MyCounter,
        CHAR( ( @MyCounter + ASCII('a') ) )
       );
   -- Increment the variable to count this iteration
   -- of the loop.
   SET @MyCounter = @MyCounter + 1;
END;
GO
SET NOCOUNT OFF;
GO
-- View the data.
SELECT cola, colb
FROM TestTable;
GO
DROP TABLE TestTable;
GO

Zadeklarowanie zmiennej języka Transact-SQL

Inicjuje instrukcja DECLARE Transact-SQL Zmienna przez:

  • Przypisywanie nazwę.Nazwa musi mieć pojedynczy @ jako pierwszego znaku.

  • Przypisywanie typu danych dostarczanych przez system lub zdefiniowane przez użytkownika i długości.Dla zmiennych liczbowych precyzji i skali również są przypisane.W przypadku zmiennych tego typu XML może być przypisana kolekcja schematu opcjonalne.

  • Ustawienie wartości NULL.

Na przykład następująca instrukcja DECLARE tworzy zmienna lokalna o nazwie @ mycounter with an int typ danych.

DECLARE @MyCounter int;

Aby zadeklarować więcej niż jednej zmiennej lokalnej, użyj przecinka po pierwszym zmiennej lokalnej, definicja, a następnie określ następny lokalnych danych i nazwa typ zmiennej.

Na przykład to instrukcja DECLARE tworzy trzy zmienne lokalne o nazwie @ Nazwisko, @ Imię and @ StateProvincei inicjowany wartości null:

DECLARE @LastName nvarchar(30), @FirstName nvarchar(20), @StateProvince nchar(2);

Zakres zmiennej jest to adres zakresu Transact-SQL instrukcje odwoływania się do zmiennej. Zakres zmiennej ma trwać od punktu, jest on zadeklarowany jako aż do zakończenia partia lub procedura przechowywana, w którym jest on zadeklarowany jako.Na przykład ponieważ zmienna jest zadeklarowany w jednej partia i odwołuje się do w innym ten skrypt generuje błąd składni:

USE AdventureWorks;
GO
DECLARE @MyVariable int;
SET @MyVariable = 1;
-- Terminate the batch by using the GO keyword.
GO 
-- @MyVariable has gone out of scope and no longer exists.

-- This SELECT statement generates a syntax error because it is
-- no longer legal to reference @MyVariable.
SELECT EmployeeID, NationalIDNumber, Title
FROM HumanResources.Employee
WHERE EmployeeID = @MyVariable;

Zmienne mają zakres lokalny i są widoczne tylko w obrębie procedury wsadowej lub gdy są one zdefiniowane.W poniższym przykładzie zagnieżdżonych zakres, dla realizacji sp_executesql nie ma dostępu do zmiennej zadeklarowanej w wyższej zakresu i zwraca wartość i błąd.

DECLARE @MyVariable int;
SET @MyVariable = 1;
EXECUTE sp_executesql N'SELECT @MyVariable'; -- this produces an error

Ustawienie wartości w zmiennej języka Transact-SQL

Po pierwsze zadeklarowana jest zmienna, jego wartość jest ustawiona na NULL.Aby przypisać wartość do zmiennej, należy użyć instrukcja zestaw.Jest to preferowana metoda przypisywania wartości do zmiennej.Zmienna może być również przypisywana przez, której dotyczy odwołanie w liście instrukcja SELECT.

Aby przypisać wartość do zmiennej za pomocą instrukcja zestaw, obejmują nazwę zmiennej i wartość, która ma być przypisana do zmiennej.Jest to preferowana metoda przypisywania wartości do zmiennej.To partia, na przykład deklaruje dwie zmienne, przypisuje wartości do je i używa ich w klauzula WHERE instrukcja SELECT:

USE AdventureWorks;
GO
-- Declare two variables.
DECLARE @FirstNameVariable nvarchar(50),
   @PostalCodeVariable nvarchar(15);

-- Set their values.
SET @FirstNameVariable = N'Amy';
SET @PostalCodeVariable = N'BA5 3HX';

-- Use them in the WHERE clause of a SELECT statement.
SELECT LastName, FirstName, JobTitle, City, StateProvinceName, CountryRegionName
FROM HumanResources.vEmployee
WHERE FirstName = @FirstNameVariable
   OR PostalCode = @PostalCodeVariable;
GO

Zmienna może być również przypisywana przez, której dotyczy odwołanie w liście select.Liście select odwołuje się do zmiennej, to należy przydzielić wartość wartość skalarna lub instrukcja SELECT powinien zwracać tylko jeden wiersz.Na przykład:

USE AdventureWorks;
GO
DECLARE @EmpIDVariable int;

SELECT @EmpIDVariable = MAX(EmployeeID)
FROM HumanResources.Employee;
GO

Ostrzeżenie

Jeśli istnieje wiele klauzul przydziału w pojedynczej instrukcja SELECT, program SQL Server nie gwarantuje kolejności oceny wyrażenia.Należy zauważyć, że efekty są widoczne tylko jeśli istnieją odwołania między przydziały.

Jeśli instrukcja SELECT zwraca więcej niż jeden wiersz i nonscalar wyrażenie odwołuje się do zmiennej, zmienna ustawiono wartość zwracana dla wyrażenia w ostatnim wierszu zestaw wyników.Na przykład w tej instancji @ EmpIDVariable ma wartośćPole IDPracownika zwracana wartość w ostatnim wierszu, który jest 1:

USE AdventureWorks;
GO
DECLARE @EmpIDVariable int;

SELECT @EmpIDVariable = EmployeeID
FROM HumanResources.Employee
ORDER BY EmployeeID DESC;

SELECT @EmpIDVariable;
GO