DECLARE @local_variable (Transact-SQL)

Zmienne zadeklarowane w treści partia lub procedury przy użyciu instrukcja DECLARE i są przypisane wartości przy użyciu zestawu lub zaznacz instrukcja.Zmienne kursor można zadeklarowana z tej instrukcja i używać w innych kursor-związanych z instrukcji.Po dokonaniu deklaracjawszystkie zmienne są inicjowane jako NULL, chyba że wartość jest dostarczane w ramach deklaracja.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

DECLARE 
     { 
{{ @local_variable [AS] data_type } | [ = value ] }
    | { @cursor_variable_name CURSOR }
} [,...n] 
    | { @table_variable_name [AS] <table_type_definition> | <user-defined table type> } 

<table_type_definition> ::= 
     TABLE ( { <column_definition> | <table_constraint> } [ ,... ] 
   ) 

<column_definition> ::= 
     column_name { scalar_data_type | AS computed_column_expression }
     [ COLLATE collation_name ] 
     [ [ DEFAULT constant_expression ] | IDENTITY [ (seed ,increment ) ] ] 
     [ ROWGUIDCOL ] 
     [ <column_constraint> ] 

<column_constraint> ::= 
     { [ NULL | NOT NULL ] 
     | [ PRIMARY KEY | UNIQUE ] 
     | CHECK ( logical_expression ) 
     } 

<table_constraint> ::= 
     { { PRIMARY KEY | UNIQUE } ( column_name [ ,... ] ) 
     | CHECK ( search_condition ) 
     } 

Argumenty

  • @local_variable
    Jest nazwą zmiennej.Nazwy zmiennych muszą rozpoczynać się na (@) znaku.Lokalne nazwy zmiennych muszą być zgodne z zasadami identyfikatorów.

  • data_type
    To dowolny typ zdefiniowany przez użytkownika tabela runtime (CLR) dostarczanych przez system, wspólnego języka lub typ danych alias .Zmienna nie może być text, ntext, lub image typu danych.

    Aby uzyskać więcej informacji dotyczących typów danych, zobacz Typy danych (Transact-SQL).Aby uzyskać więcej informacji dotyczących typów zdefiniowanych przez użytkownika CLR lub alias danych, zobacz Tworzenie typu języka Transact-SQL).

  • =value
    Przypisuje wartość zmiennej w linii.Wartość może być stała lub wyrażenie, ale musi on pasuje do typu zmiennej deklaracja lub być jawnie konwertowany na tego typu.

  • @cursor_variable_name
    Jest nazwą zmiennej kursor .Kursor nazwy zmiennych muszą rozpoczynać się na (@) podpisują i zgodne z zasadami dla identyfikatorów.

  • KURSOR
    Określa, że zmienna jest zmienną lokalną kursor .

  • @table_variable_name
    Jest nazwą zmiennej typu table.Nazwy zmiennych muszą rozpoczynać się na (@) podpisują i zgodne z zasadami dla identyfikatorów.

  • <table_type_definition>
    Definiuje table typu danych.tabeladeklaracja zawiera definicje kolumna , nazwy, typy danych i ograniczenia. Dozwolone typy Jedyne ograniczenie to klucz podstawowy, unikatowe, NULL i wyboru.Typ danych alias nie można użyć jakowartość skalarna typ danych kolumnaJeśli reguła lub domyślnej definicji jest związany z typem.

    <table_type_definition> jest podzbiór informacji służy do definiowania tabela w CREATE TABLE.Elementy i podstawowe definicje włącza się tu.Aby uzyskać więcej informacji, zobacz CREATE TABLE (Transact-SQL).

  • n
    Jest symbolem zastępczym wskazującą, że wiele zmiennych może być określone i przypisane wartości.Deklarując table zmiennych, table Zmienna musi być jedyną zmienną zostały zgłoszone w instrukcjaDECLARE.

  • column_name
    Jest to nazwa kolumna w tabela.

  • scalar_data_type
    Określa, że kolumna typ danych wartość skalarna .

  • computed_column_expression
    Jest wyrażenie określające wartość kolumnaobliczanej.Jest ona obliczana z wyrażenie , używając innych kolumn w tej samej tabela.Na przykład, obliczanej kolumna może mieć definicji koszt jako Cena * ilość.wyrażenie może być nazwa noncomputed kolumna , stała, wbudowanych funkcja, zmienna lub dowolnej kombinacji tych połączonych przez jeden lub więcej operatorów.wyrażenie nie może być zdefiniowana przez użytkownika funkcjalub podzapytanie .wyrażenie nie może odwoływać się do zdefiniowany przez użytkownika typ CLR.

  • [ COLLATE collation_name]
    Określa sortowanie dla kolumna.collation_namemoże być nazwa sortowanie systemu Windows lub nazwasortowanie SQLi ma zastosowanie tylko do kolumn char, varchar, text, nchar, nvarchar, i ntext typów danych.Jeśli nie określono kolumna jest przypisywana do sortowanie typ danych zdefiniowany przez użytkownika (Jeśli kolumna ma typ danych zdefiniowany przez użytkownika) lub sortowanie bieżącej bazy danych.

    Aby uzyskać więcej informacji o nazwachsortowanie systemu Windows i SQL, zobacz SORTOWANIE (Transact-SQL).

  • DOMYŚLNE
    Określa wartość podana dla kolumna , gdy wartość nie jest jawnie podany podczas wstawiania.Definicje domyślne mogą być stosowane do żadnych kolumn, z wyjątkiem tych określonych jako timestamp lub tych, których właściwośćIDENTITY.Definicje domyślne są usuwane po upuszczeniu tabela .Tylko wartość stała , takich jak znak ciąg; system funkcja, takich jak SYSTEM_USER(); lub wartość NULL może być używany jako domyślny.Aby zachować zgodność ze starszymi wersjami programu SQL Server, nazwa ograniczenia mogą być przypisane do DOMYŚLNYCH.

  • constant_expression
    Jest stała, NULL lub systemu funkcja używana jako wartość domyślna dla kolumna.

  • TOŻSAMOŚĆ
    Wskazuje, że nowa kolumna jest kolumnatożsamooci.Podczas dodawania nowego wiersza do tabela SQL Server zawiera unikatową wartość przyrostowe dla kolumna.Kolumny identyfikacji są często używane w połączeniu z ograniczeń klucza podstawowego służyć jako identyfikator unikatowy wiersz tabela.Identyfikacja właściwość można przypisać do tinyint, smallint, int, decimal(p,0), lub numeric(p,0) kolumny.tabelamożna utworzyć tylko jedną kolumna .Domyślne powiązania i ograniczeń DOMYŚLNEJ nie można używać z kolumna.Należy określić zarówno materiału siewnego i przyrostu lub żadna.Jeśli zostanie podana żadna wartość domyślna to (1,1).

  • seed
    Wartość używana dla bardzo pierwszy wiersz jest ładowany do tabela.

  • increment
    Jest wartością przyrostowe dodane do wartości tożsamości poprzedniego wiersza, który został załadowany.

  • ROWGUIDCOL
    Wskazuje, że nowa kolumna jest globalnym identyfikator unikatowy wiersz kolumna.Tylko jeden uniqueidentifierkolumna w tabela może być wyznaczony jako ROWGUIDCOL kolumna.ROWGUIDCOL właściwość można przypisać tylko do uniqueidentifier kolumna.

  • NULL | NIEDOZWOLONE WARTOŚCI NULL
    Są słowa kluczowe, które określają, czy dozwolone są wartości null w kolumna.

  • KLUCZ PODSTAWOWY
    To ograniczenie wymusza obiekt integralność dla danej kolumna lub kolumn do indeks unikatowy.Mogą być tworzone tylko jedno ograniczenie klucza podstawowego tabela.

  • UNIKATOWE
    To ograniczenie, które zapewnia obiekt integralność dla danej kolumna lub kolumn do indeks unikatowy.tabela może mieć wiele ograniczeń UNIQUE.

  • WYBORU
    To ograniczenie wymusza domena integralność poprzez ograniczenie możliwych wartości, które mogą być wprowadzane do kolumna lub kolumn.

  • logical_expression
    Jest logiczną wyrażenie , które zwraca wartość PRAWDA lub FAŁSZ.

  • <Typ zdefiniowany przez użytkownika tabela>
    Określa, że zmienna jest Typ zdefiniowany przez użytkownika tabela.

Uwagi

Zmienne są często używane w procedury partia lub jak liczniki podczas pętli, lub IF...INNY blok.

Zmienne można używać tylko w wyrażeniach nie zamiast nazwy obiektu lub słów kluczowych.Do konstruowania dynamicznych instrukcji SQL , należy użyć EXECUTE.

zakres zmiennej lokalnej jest partia , w którym jest on zadeklarowany jako.

Zmienna kursor , która aktualnie znajduje się kursor przypisane do niego odwoływać się jako źródło w a:

  • Zamknij instrukcja.

  • DEALLOCATE instrukcja.

  • POBIERANIE instrukcja.

  • OPEN instrukcja.

  • Pozycjonowane DELETE lub UPDATE instrukcja.

  • Ustaw kursor zmiennej instrukcja (po prawej stronie).

We wszystkich tych oświadczeń SQL Server zgłasza błąd, jeżeli istnieje, ale nie ma kursor aktualnie przydzielona do niej zmiennej odwołanie kursorJeśli zmienna odwołanie kursor nie istnieje, SQL Server wywołuje ten sam błąd, wywoływane niezadeklarowanej zmiennej innego typu.

Zmienna kursor :

  • Może być miejsce docelowe typ kursor lub innej zmiennej kursor .Aby uzyskać więcej informacji, zobacz Ustaw @ local_variable (języka Transact-SQL).

  • Można się odwoływać jako miejsce docelowe parametru wyjściowego kursor w wykonywanie instrukcja , jeśli zmienna kursor nie jest kursor aktualnie przypisany.

  • Powinny być traktowane jako wskaźnik kursor.Aby uzyskać więcej informacji na temat zmiennych kursor zobacz Kursory Transact-SQL.

Przykłady

A.Za pomocą DECLARE

W poniższym przykładzie użyto zmiennej lokalnej o nazwie @find do pobierania informacji kontaktowych dla wszystkich nazwisk, począwszy od Man.

USE AdventureWorks2008R2;
GO
DECLARE @find varchar(30);
/* Also allowed: 
DECLARE @find varchar(30) = 'Man%';
*/
SET @find = 'Man%';
SELECT p.LastName, p.FirstName, ph.PhoneNumber
FROM Person.Person p 
JOIN Person.PersonPhone ph
ON p.BusinessEntityID = ph.BusinessEntityID
WHERE LastName LIKE 'Man%';

Oto zestaw wyników.

LastName FirstName Phone

-------------------------------------------------- -------------------------------------------------- -------------------------

Manchepalli Ajay 1 (11) 500 555-0174

Manek Parul 1 (11) 500 555-0146

Manzanares Tomas 1 (11) 500 555-0178

(3 row(s) affected)

B.Za pomocą DECLARE z dwoma zmiennymi

Poniższy przykład pobiera nazwy Adventure Works Cycles przedstawiciele handlowi, którzy znajdują się w Ameryce Północnej obszaru sprzedaży i mieć co najmniej 2,000,000 $ w sprzedaży dla danego roku.

USE AdventureWorks2008R2;
GO
SET NOCOUNT ON;
GO
DECLARE @Group nvarchar(50), @Sales money;
SET @Group = N'North America';
SET @Sales = 2000000;
SET NOCOUNT OFF;
SELECT FirstName, LastName, SalesYTD
FROM Sales.vSalesPerson
WHERE TerritoryGroup = @Group and SalesYTD >= @Sales;

C.Deklarowanie zmiennej typu tabela

Poniższy przykład tworzy table zmienną, która przechowuje wartości określone w danych wyjściowych klauzula UPDATE instrukcja.Dwa SELECT Wykonaj instrukcje, które zwracają wartości w @MyTableVar i wyniki operacji aktualizacji w Employee tabela.Należy zauważyć, że wyniki w INSERTED.ModifiedDate kolumna różnią się od wartości w ModifiedDate kolumna w Employee tabela.Wynika to z AFTER UPDATE wyzwalacz, który aktualizuje wartość ModifiedDate zdefiniowanego w bieżącej datana Employee tabela.Jednakże zwrócił kolumny OUTPUT odzwierciedlają dane przed wyzwalacze są uruchamiane.Aby uzyskać więcej informacji, zobacz Klauzula wyjściowy (Transact-SQL).

USE AdventureWorks2008R2;
GO
DECLARE @MyTableVar table(
    EmpID int NOT NULL,
    OldVacationHours int,
    NewVacationHours int,
    ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25,
    ModifiedDate = GETDATE() 
OUTPUT inserted.BusinessEntityID,
       deleted.VacationHours,
       inserted.VacationHours,
       inserted.ModifiedDate
INTO @MyTableVar;
--Display the result set of the table variable.
SELECT EmpID, OldVacationHours, NewVacationHours, ModifiedDate
FROM @MyTableVar;
GO
--Display the result set of the table.
SELECT TOP (10) BusinessEntityID, VacationHours, ModifiedDate
FROM HumanResources.Employee;
GO

D.Deklarowanie zmiennej typ zdefiniowany przez użytkownika tabela

Poniższy przykład tworzy tabela-wyceniane zmiennej tabela lub parametr o nazwie @LocationTVP.Wymaga to odpowiedni typ zdefiniowany przez użytkownika tabela o nazwie LocationTableType.Aby uzyskać więcej informacji na temat tworzenia typ zdefiniowany przez użytkownika tabela , zobacz Tworzenie typu języka Transact-SQL).Aby uzyskać więcej informacji o tabela-wyceniane parametrów, zobacz Parametry oródwierszową (aparat bazy danych).

DECLARE @LocationTVP 
AS LocationTableType;