Ustaw @ local_variable (języka Transact-SQL)

Ustawia określony zmiennej lokalnej poprzednio utworzone przy użyciu DECLARE @local_variable instrukcja, określona wartość.

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

Składnia

SET 
{ @local_variable
    [ . { property_name | field_name } ] = { expression | udt_name { . | :: } method_name }
}
|
{ @SQLCLR_local_variable.mutator_method
}
|
{ @local_variable
    {+= | -= | *= | /= | %= | &= | ^= | |= } expression
}
| 
  { @cursor_variable = 
    { @cursor_variable | cursor_name 
    | { CURSOR [ FORWARD_ONLY | SCROLL ] 
        [ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] 
        [ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] 
        [ TYPE_WARNING ] 
    FOR select_statement 
        [ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ] 
      } 
    }
} 

Argumenty

  • @local_variable
    Jest nazwą zmiennej dowolnego typu, z wyjątkiem cursor, text, ntext, image, lub table.Nazwy zmiennych muszą być uruchomione z jednym znakiem (@).Nazwy zmiennych muszą być zgodne z zasadami identyfikatorów.

  • property_name
    Jest to właściwość typ zdefiniowany przez użytkownika.

  • field_name
    Jest publiczny pole typ zdefiniowany przez użytkownika.

  • udt_name
    Jest nazwą wspólnego języka runtime (CLR) typ zdefiniowany przez użytkownika.

  • { . | :: }
    Określa metoda CLR użytkownika zdefiniować typ.Dla wystąpienie (niestatyczny) metoda, należy używać kropki (.).W przypadku statycznej metodaużyć dwoma dwukropkami (:).Aby wywołać metoda, właściwośćlub pole zdefiniowany przez użytkownika typ CLR, musi mieć uprawnienie EXECUTE do typu.

  • method_name(argument [ ,... n ] )
    Jest metoda przyjmuje jeden lub więcej argumentów do modyfikowania stanu wystąpienie typu typ zdefiniowany przez użytkownika .Metody statyczne muszą być publiczne.

  • @SQLCLR_local_variable
    Jest zmienną, której typ znajduje się w wirtualny plik dziennika.Aby uzyskać więcej informacji, zobacz Pojęcia dotyczące programowania wspólnej integracji Runtime (CLR) języka.

  • mutator_method
    Jest to metoda w wirtualny plik dziennika można zmienić stan obiektu.SQLMethodAttribute.IsMutator zostaną zastosowane do tej metoda.

  • { += | -= | *= | /= | %= | &= | ^= | |= }
    Złożone operatorprzypisania:

    += Dodawanie i przypisywanie

    -= Odjąć i przypisać

    * = Pomnożyć i przypisać

    / = Dzielenie i przypisz

    % = Modulo i przypisać

    &= Iloczynu (AND) i przypisz

    ^ = Bitowe XOR i przypisać

    | = Logiczną lub i przypisz

  • expression
    Wszelkie obowiązuje wyrażenie.

  • cursor_variable
    Jest nazwą zmiennej kursor .Uprzednio zmienną miejsce docelowe kursor odwołuje się do różnych kursor, tym poprzednich odniesienia jest usuwany.

  • cursor_name
    Jest to nazwa kursor zadeklarowane za pomocą instrukcjaDECLARE CURSOR.

  • KURSOR
    Określa, że zestaw instrukcja zawiera deklaracja kursor.

  • PRZEWIJANIA
    Określa, że kursor obsługuje wszystkie opcje pobierania: IMIĘ nazwisko, dalej, przed, względnych i BEZWZGLĘDNYCH.Nie można określić PRZEWIJANIA, gdy określony jest również FAST_FORWARD.

  • FORWARD_ONLY
    Określa, że kursor obsługuje tylko pobrania NASTĘPNEJ opcji.kursor można pobrać tylko w jednym kierunku od pierwszego do ostatniego wiersza.Gdy FORWARD_ONLY jest określona bez STATYCZNE, zestawu KLUCZY lub DYNAMICZNYCH słowa kluczowe, kursor jest zaimplementowany jako DYNAMICZNY.Po określeniu PRZEWIJANIA ani FORWARD_ONLY FORWARD_ONLY jest ustawieniem domyślnym, chyba że określono słów kluczowych STATIC, zestawu KLUCZY lub dynamiczne.STATYCZNE, zestaw KLUCZY i dynamiczne kursory PRZEWIJANIA jest ustawieniem domyślnym.

    Ostrzeżenie

    W SQL Server 2000, FAST_FORWARD i FORWARD_ONLY kursor są wzajemnie wyłączności.Jeśli zostanie określony, drugiej nie może być i spowodował błąd.Oba słowa kluczowe mogą być używane w tej samej instrukcjaDECLARE CURSOR.

  • STATYCZNE
    Definiuje tworzy tymczasową kopię danych używane przez kursor kursor .Wszystkie żądania do kursor są odbierane z tabela tymczasowej w tempdb; Dlatego modyfikacje oprzeć tabele nie są odzwierciedlane w danych zwróconych przez pobiera dokonać tego kursori tego kursor nie zezwala na zmiany.

  • ZESTAW KLUCZY
    Określa, że członkostwa i kolejność wierszy w kursor są ustalone przy otwieraniu kursor .zestaw kluczy, które jednoznacznie identyfikują wiersze jest wbudowane w keysettabela w tempdb.Zmiany wartości nonkey w tabelach podstawowych przez właściciela kursor lub popełnionych przez innych użytkowników są widoczne jako właściciel kursor zostanie przewinięty wokół kursor.Wstawia wprowadzonych przez innych użytkowników nie są widoczne i wstawia nie może być dokonane za pomocą Transact-SQL serwera kursor.

    Jeśli wiersz zostanie usunięty, próba pobrania wiersza zwraca FETCH_STATUS @@-2.Aktualizacje wartości klucz z zewnątrz kursor są podobne do usuwania starych wiersza następuje wstawienie nowego wiersza.Wiersz z nowymi wartościami nie jest widoczny i podejmuje próbę pobrania wierszy z starych wartości zwracanej @@ FETCH_STATUS-2.Nowe wartości są widoczne, jeśli aktualizacja jest wykonywana przez kursor określając gdzie bieżący z klauzula.

  • DYNAMICZNE
    Definiuje kursor , który odzwierciedla wszystkie zmiany danych do wierszy w jego zestaw wyników kursor wokół kursorzostanie przewinięty właściciela.Na każdego pobrania można zmienić wartości danych, zamówienia i członkostwa wierszy.Dynamiczne kursory nie są obsługiwane opcje pobierania względne i bezwzględne.

  • FAST_FORWARD
    Określa FORWARD_ONLY, TYLKO_DO_ODCZYTU kursor z optymalizacje włączone.Nie można określić FAST_FORWARD, gdy określony jest również PRZEWIJANIA.

    Ostrzeżenie

    W SQL Server 2000, FAST_FORWARD i FORWARD_ONLY kursor są wzajemnie wyłączności.Jeśli zostanie określony, drugiej nie może być i spowodował błąd.Oba słowa kluczowe mogą być używane w tej samej instrukcjaDECLARE CURSOR.

  • TYLKO_DO_ODCZYTU
    Zapobiega aktualizacji dokonywany za pośrednictwem tego kursor.kursor nie można odwoływać się w którym BIEŻĄCEJ Z klauzula w aktualizacji lub usunięcia instrukcja.Ta opcja zastępuje możliwości domyślny kursor do aktualizacji.

  • BLOKADA PRZEWIJANIA
    Określa pozycjonowane aktualizacji lub usuwania dokonane za pomocą kursor są gwarantowane powiodła się.SQL Serverblokuje wierszy, gdy są odczytywane w kursor , aby zagwarantować ich dostępność dla nowszych modyfikacji.Nie można określić SCROLL_LOCKS, gdy określony jest również FAST_FORWARD.

  • PRZYPADEK OPTYMISTYCZNY
    Określa, że pozycjonowane aktualizacji lub usuwania dokonane za pomocą kursor nie powiodła się, jeśli wiersz został zaktualizowany, ponieważ została przeczytana do kursor.SQL Servernie blokada wiersze, jak są odczytywane w kursor.Zamiast tego używa porównania timestampwartościkolumna lub suma kontrolna wartość, gdy tabela nie ma timestampkolumna, aby ustalić, czy wiersz był modyfikowany po odczytano do kursor. Jeśli wiersz został zmodyfikowany próba aktualizacja pozycjonowana lub usunąć nie powiedzie się.Nie można określić OPTIMISTIC, gdy określony jest również FAST_FORWARD.

  • TYPE_WARNING
    Określa, że komunikat ostrzegawczy jest wysyłany do klient , gdy kursor jest niejawnie konwertowane żądany typ na inny.

  • DLAselect_statement
    Jest standardowym SELECT instrukcja definiująca, zestaw wyników kursor.Słowa kluczowe komputerowe, COMPUTE BY, aby PRZEGLĄDAĆ i INTO nie są dozwolone w ramach select_statement kursor deklaracja.

    Jeśli DISTINCT, Unia, GROUP BY lub HAVING są używane lub jest częścią wartość zagregowana wyrażenie select_list, kursor zostanie utworzone jako STATIC.

    Jeśli każda z tabel podstawowych nie ma indeks unikatowy i ISO PRZEWIJANIA kursor lub w Transact-SQL kursor zbioru KLUCZY jest wymagane, zostanie automatycznie STATYCZNE kursor.

    Jeśli select_statement zawiera ORDER BY klauzula w którym kolumny nie są wiersza unikatowe identyfikatory, dynamiczne kursor jest konwertowany na kursorzestawu KLUCZY lub STATYCZNEJ kursor Jeśli zestaw KLUCZY kursor nie można otworzyć.Dzieje się także kursor zdefiniowane przy użyciu składni ISO, ale bez słowa kluczowego STATIC.

  • TYLKO DO ODCZYTU
    Zapobiega aktualizacji dokonywany za pośrednictwem tego kursor.kursor nie można odwoływać się w którym BIEŻĄCEJ Z klauzula w aktualizacji lub usunięcia instrukcja.Ta opcja zastępuje możliwości domyślny kursor do aktualizacji.Słowo kluczowe this zależy od wcześniejszych TYLKO_DO_ODCZYTU mających miejsce zamiast podkreślenia między odczytu i tylko.

  • UPDATE [OF column_name[ ,... n ] ]
    Definiuje kolumn aktualizowalnego kursor.If OF column_name**,**...n] jest dostarczany tylko do kolumn wymienionych umożliwi modyfikacje.Jeżeli lista nie jest podany, wszystkie kolumny mogą być aktualizowane, chyba że kursor został określony jako TYLKO_DO_ODCZYTU.

Uwagi

Po zadeklarowaniu zmiennej jest ustawiana na wartość NULL.Przypisz wartość NULL zmiennej zadeklarowanej za pomocą zestawu instrukcja .SET instrukcja przypisuje wartość zmiennej zwraca pojedynczą wartość.Podczas inicjowania wielu zmiennych za pomocą oddzielnego zestawu instrukcja dla każdej zmiennej lokalnej.

Zmienne można używać tylko w wyrażeniach nie zamiast nazwy obiektu lub słów kluczowych.Do konstruowania dynamicznych Transact-SQL za pomocą instrukcji EXECUTE.

Reguły składni dla zestawu @cursor_variable nie należy umieszczać słowa kluczowe lokalne i globalne.Gdy zestaw @cursor_variable = kursor...Składnia jest używana, kursor jest tworzony jako GLOBALNY lub lokalny w zależności od ustawienia default to local cursor opcji bazy danych.

Kursor zmienne są zawsze lokalnego, nawet jeśli odwołują się one do globalnego kursor.Gdy zmiennej kursor odwołuje się do globalnego kursor, kursor ma globalnym i odniesienia kursor lokalnego.Aby uzyskać więcej informacji zobacz przykład C.

Aby uzyskać więcej informacji, zobacz DECLARE CURSOR (Transact-SQL).

Przydział złożony operator może być używany wszędzie mieć przypisania z wyrażenie na prawej stronie operator, włączając zmienne i zestaw w aktualizacji, zaznacz i ODBIERZ instrukcja.

Uprawnienia

Wymaga członkostwa w public rolę.Wszyscy użytkownicy mogą używać zestawu @local_variable.

Przykłady

A.Drukowanie wartości zmiennej zainicjowane za pomocą zestawu

Poniższy przykład tworzy @myvar zmiennej, która powoduje umieszczenie wartości ciąg w zmiennej i wartości @myvar zmienną.

DECLARE @myvar char(20);
SET @myvar = 'This is a test';
SELECT @myvar;
GO

B.Za pomocą zmiennej lokalnej przypisaną wartość przy użyciu zestawu w instrukcjaSELECT

Poniższy przykład tworzy zmienną lokalną o nazwie @state i używa tej zmiennej lokalnej w SELECT instrukcja imienia i nazwiska wszystkich pracowników, którzy znajdują się w stanie znaleźć Oregon.

USE AdventureWorks2008R2;
GO
DECLARE @state char(25);
SET @state = N'Oregon';
SELECT RTRIM(FirstName) + ' ' + RTRIM(LastName) AS Name, City
FROM HumanResources.vEmployee
WHERE StateProvinceName = @state;

C.Korzystanie z mieszanek przypisania zmiennej lokalnej

Dwa poniższe przykłady dają ten sam wynik.Tworzą zmienną lokalną o nazwie @NewBalance, mnożony przez 10 i wyświetla nową wartość zmiennej lokalnej w SELECT instrukcja.W drugim przykładzie użyto przydział złożony operator.

/* Example one */
DECLARE  @NewBalance  int ;
SET  @NewBalance  =  10;
SET  @NewBalance  =  @NewBalance  *  10;
SELECT  @NewBalance;

/* Example Two */
DECLARE @NewBalance int = 10;
SET @NewBalance *= 10;
SELECT @NewBalance;

D.Przy użyciu zestawu z globalnej kursor

Poniższy przykład tworzy zmienną lokalną, a następnie ustawia zmienną kursor do nazwy globalne kursor .

DECLARE my_cursor CURSOR GLOBAL 
FOR SELECT * FROM Purchasing.ShipMethod
DECLARE @my_variable CURSOR ;
SET @my_variable = my_cursor ; 
--There is a GLOBAL cursor declared(my_cursor) and a LOCAL variable
--(@my_variable) set to the my_cursor cursor.
DEALLOCATE my_cursor; 
--There is now only a LOCAL variable reference
--(@my_variable) to the my_cursor cursor.

E.Definiowanie kursor przy użyciu zestawu

W poniższym przykładzie użyto SET instrukcja do definiowania kursor.

DECLARE @CursorVar CURSOR;

SET @CursorVar = CURSOR SCROLL DYNAMIC
FOR
SELECT LastName, FirstName
FROM AdventureWorks2008R2.HumanResources.vEmployee
WHERE LastName like 'B%';

OPEN @CursorVar;

FETCH NEXT FROM @CursorVar;
WHILE @@FETCH_STATUS = 0
BEGIN
    FETCH NEXT FROM @CursorVar
END;

CLOSE @CursorVar;
DEALLOCATE @CursorVar;

F.Przypisanie wartości z kwerendy

W poniższym przykładzie użyto kwerendy, aby przypisać wartość do zmiennej.

USE AdventureWorks2008R2;
GO
DECLARE @rows int;
SET @rows = (SELECT COUNT(*) FROM Sales.Customer);
SELECT @rows;

G.Przypisanie wartości zmiennej typ zdefiniowany przez użytkownika przez zmodyfikowanie właściwość typu

Poniższy przykład ustawia wartość typ zdefiniowany przez użytkownika Point , zmieniając wartość właściwość X typu.

DECLARE @p Point;
SET @p.X = @p.X + 1.1;
SELECT @p;
GO

H.Przypisanie wartości do zmiennej typ zdefiniowany przez użytkownika , wywołując metoda typu

Poniższy przykład ustawia wartość typ zdefiniowany przez użytkownika Point przez metoda SetXY typu.

DECLARE @p Point;
SET @p=point.SetXY(23.5, 23.5);

I.Tworzenie zmiennej typu CLR i wywołania metodamutator

Poniższy przykład tworzy zmienną typu Point, a następnie wykonuje mutator metoda w Point.

CREATE ASSEMBLY mytest from 'c:\test.dll' WITH PERMISSION_SET = SAFE
CREATE TYPE Point EXTERNAL NAME mytest.Point
GO
DECLARE @p Point = CONVERT(Point, '')
SET @p.SetXY(22, 23);