DECLARE @local_variable (Transact-SQL)

Zmienne są zgłaszane do treści programu wsadowego lub procedury przy użyciu instrukcja DECLARE i są przypisane wartości przy użyciu instrukcja zestaw albo SELECT.Kursor zmienne mogą być deklarowane z tej instrukcja i używane w innych instrukcjach związanych z kursora.Po zgłoszeniu wszystkie zmienne są inicjowane jako wartość NULL, chyba że wartość jest dostarczane w ramach deklaracja.

Topic link iconKonwencje składni języka Transact-SQL

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ć na ()
    @
    ) Zaloguj się.Lokalne nazwy zmiennych muszą być zgodne z regułami dla identyfikatory.

  • data_type
    Jest wspólne, wszelkie systemu dostarczone przez język (CLR) w czasie wykonywania tabela zdefiniowaną przez użytkownika typu lub alias typu danych.Zmienna nie może być text, ntext, lub image Typ danych.

    Aby uzyskać więcej informacji na temat typów danych systemu Zobacz Data Types (Transact-SQL). Aby uzyskać więcej informacji na temat środowiska CLR typów zdefiniowanych przez użytkownika lub alias typy danych zobacz CREATE TYPE (Transact-SQL).

  • = value
    Przypisuje wartość do zmiennej w wiersz.Wartość może być stała lub wyrażenie, ale musi odpowiadać typowi deklaracja zmiennej lub można niejawnie zamienne dla tego typu.

  • @cursor_variable_name
    Jest nazwą zmiennej kursor.Kursor w nazwach zmiennych musi zaczynać się od na ()
    @
    ) zarejestrować się i są zgodne z zasadami dla identyfikatorów.

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

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

  • <table_type_definition>
    Definiuje table Typ danych. Deklaracja tabela zawiera definicje kolumn, nazwy, typy danych i ograniczeń.Typy Jedyne ograniczenie dozwolone są klucz podstawowy, unikatowy, wartości NULL i wyboru.Typem danych alias nie można użyć jako typu danych wartość skalarna kolumna, jeśli reguła lub domyślnej definicji jest związany z typem.

    <table_type_definition> jest podzbiorem informacje używane do definiowania tabela w CREATE tabela. W tym elementów i definicje podstawowych miejscu są uwzględniane.Aby uzyskać więcej informacji zobaczCREATE TABLE (Transact-SQL).

  • n
    Jest symbolem zastępczym wskazującą, że wiele zmiennych może być określony i przypisane wartości.Podczas zgłaszania Tabela zmiennychTabela zmiennej musi być jedynym zmiennej jest zadeklarowanej w instrukcja DECLARE.

  • column_name
    To nazwa kolumna w tabela.

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

  • computed_column_expression
    Wyrażenie jest zdefiniowanie wartości kolumna obliczana.To jest obliczana z wyrażenie przy użyciu innych kolumn w tej samej tabela.Kolumna obliczana może mieć na przykład, definicja Koszt AS cena * ilość.Wyrażenie może być nazwę kolumna noncomputed, funkcja wbudowanych, stała, zmienna lub dowolną ich kombinacją połączone przy użyciu jednego lub kilku operatorów.Wyrażenie nie może być podkwerenda lub funkcja zdefiniowanej przez użytkownika.Wyrażenie nie może odwoływać się do środowiska zdefiniowany przez użytkownika typ danych CLR.

  • [ COLLATE collation_name]
    Specifies the collation for the column.collation_name can be either a Windows collation name or an SQL collation name, and is applicable only for columns of the char, varchar, text, nchar, nvarchar, and ntext data types.Jeśli nie zostanie określony, w kolumnie jest przypisywany sortowanie typu danych zdefiniowanego przez użytkownika (jeżeli kolumna jest typu danych zdefiniowanego przez użytkownika) lub sortowanie bieżącej bazy danych.

    Aby uzyskać więcej informacji na temat nazw sortowanie systemu Windows i programu SQL zobacz COLLATE (Transact-SQL).

  • WARTOŚĆ DOMYŚLNA
    Określa wartość podana kolumna, gdy wartość nie jest jawnie podany podczas wstawiania.Definicje DEFAULT można stosować do żadnych kolumn, z wyjątkiem tych, które są zdefiniowane jako timestamp lub tych, których właściwość IDENTITY. Definicje DEFAULT są usuwane, gdy w tabela zostanie usunięte.Tylko stała wartości, takiej jak ciąg znaków; funkcja systemowych, takich jak SYSTEM_USER(); lub wartość NULL może być używany jako domyślny.Aby zachować zgodność ze starszymi wersjami SQL Server, nazwa ograniczenia mogą być przypisane do domyślnego.

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

  • TOŻSAMOŚĆ
    Wskazuje, że nowa kolumna kolumna tożsamości.Po dodaniu nowego wiersza w tabela SQL Server zawiera unikatową wartość przyrostowej dla kolumna. For more information on OGC specifications, see the following resources:Właściwość IDENTITY mogą być przypisane do tinyint, smallint, int, decimal(p,0), lub numeric(p,0) kolumny. Tylko jeden kolumna tożsamości mogą być tworzone na tabela.Wartości domyślne związane i DEFAULT ograniczeń nie mogą być używane z tożsamości kolumna.Należy określić zarówno siewnego i przyrostu lub żadna.Jeśli żadna z nich nie zostanie określony, wartość domyślna to (1,1).

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

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

  • ROWGUIDCOL
    Nie ma znaczenia.Tylko jeden uniqueidentifierKolumna tabela może być wyznaczony jako kolumna ROWGUIDCOL. Właściwość ROWGUIDCOL mogą być przypisywane tylko do uniqueidentifier Kolumna.

  • WARTOŚCI NULL | NIE JEST PUSTY
    Czy słowa kluczowe, które określają, czy kolumna dozwolone są wartości null.

  • KLUCZ PODSTAWOWY
    Jest ograniczenie, które wymusza integralność obiekt dla danej kolumna lub kolumn do indeks unikatowy.Mogą być tworzone tylko jeden ograniczenia klucz podstawowy dla tabela.

  • UNIKATOWE
    Jest ograniczenie, które zapewnia integralność obiekt dla danej kolumna lub kolumn do unikatowego indeksu.Tabela może zawierać wiele ograniczeń UNIQUE.

  • SPRAWDŹ
    Jest ograniczenie, które wymusza integralność domena, ograniczając możliwych wartości, które mogą być wprowadzane do kolumna lub kolumn.

  • logical_expression
    To wyrażenie logiczne, które zwraca wartość TRUE lub FALSE.

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

Remarks

Zmienne są często używane w procedury wsadowej lub jak liczniki dla WHILE LOOP, lub dla IF... ELSE blokowania.

Zmienne mogą być używane tylko w wyrażeniach nie zamiast nazwy obiektu lub słowa kluczowe.Do konstruowania dynamicznych instrukcji SQL, należy użyć wykonać.

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

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

  • Instrukcja CLOSE.

  • DEALLOCATE instrukcja.

  • Instrukcja pobrania.

  • Instrukcja OPEN.

  • Pozycjonowane instrukcja DELETE lub UPDATE.

  • Zmienna instrukcja zestaw kursor (po prawej stronie).

We wszystkich tych instrukcji SQL Server zgłasza błąd, jeżeli istnieje zmienna kursor do którego istnieje odwołanie, ale nie ma obecnie przydzielony jest z nim kursor. Jeśli zmienna kursor do którego istnieje odwołanie, nie istnieje, SQL Server wywołuje ten sam błąd, wywoływane dla zmiennych niezadeklarowanego innego typu.

Zmienna kursor:

  • Może być miejsce docelowe typ kursor lub innej zmiennej kursor.Aby uzyskać więcej informacji zobaczSET @local\_variable (Transact-SQL).

  • Można się odwoływać jako miejsce docelowe parametru wyjściowego kursor w instrukcja wykonać Jeśli zmiennej kursora nie ma aktualnie przypisane do niego kursor.

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

Przykłady

A.Za pomocą DECLARE

W poniższym przykładzie użyto zmiennej lokalnej o nazwie @find Aby pobrać informacje kontaktowe dla wszystkich ostatniego nazwiska rozpoczynające się od Man.

USE AdventureWorks;
GO
DECLARE @find varchar(30);
/* Also allowed: 
DECLARE @find varchar(30) = 'Man%';
*/
SET @find = 'Man%';
SELECT LastName, FirstName, Phone
FROM Person.Contact
WHERE LastName LIKE @find;

Here is the result set.

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.Przy użyciu DECLARE z dwoma zmiennymi

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

USE AdventureWorks;
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.Zadeklarowanie zmiennej typu tabela

Poniższy przykład tworzy table Zmienna, która przechowuje wartości określone w klauzula wyjście instrukcja UPDATE. Dwa SELECT instrukcje, należy wykonać, 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 polach ModifiedDate kolumny w Employee Tabela. Dzieje się tak, ponieważ AFTER UPDATE wyzwalacz, która aktualizuje wartości ModifiedDate Data bieżąca jest zdefiniowany na Employee Tabela. Jednak zwrócił kolumny OUTPUT odzwierciedlające dane przed wyzwalacze są uruchamiane. Aby uzyskać więcej informacji zobaczKlauzula OUTPUT (języka Transact-SQL).

USE AdventureWorks;
GO
DECLARE @MyTableVar table(
    EmpID int NOT NULL,
    OldVacationHours int,
    NewVacationHours int,
    ModifiedDate datetime);
UPDATE TOP (10) HumanResources.Employee
SET VacationHours = VacationHours * 1.25 
OUTPUT INSERTED.EmployeeID,
       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.
--Note that ModifiedDate reflects the value generated by an
--AFTER UPDATE trigger.
SELECT TOP (10) EmployeeID, VacationHours, ModifiedDate
FROM HumanResources.Employee;
GO

D.Zadeklarowanie zmiennej typu tabela zdefiniowaną przez użytkownika

Poniższy przykład tworzy wycenione tabela tabela lub parametr zmienną o nazwie @LocationTVP. Wymaga to odpowiedni typ zdefiniowany przez użytkownika tabela o nazwie LocationTableType. Aby uzyskać więcej informacji na temat tworzenia tabela zdefiniowaną przez użytkownika Zobacz CREATE TYPE (Transact-SQL). Aby uzyskać więcej informacji na temat parametrów wycenione tabela zobacz Tabela Valued parametry (aparat bazy danych).

DECLARE @LocationTVP 
AS LocationTableType;