Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Nastaví zadanou místní proměnnou, která byla dříve vytvořená pomocí DECLARE @local_variable příkazu, na zadanou hodnotu.
Syntax
Syntaxe PRO SQL Server, Azure SQL Database a Azure SQL Managed Instance:
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 [ [ LOCAL | GLOBAL ] ]
[ 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 ] ] } ]
}
}
}
Syntaxe pro Azure Synapse Analytics a paralelní datový sklad a Microsoft Fabric:
SET @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression
Arguments
@local_variable
Název proměnné libovolného typu s výjimkou kurzoru, textu, ntextu, obrázku nebo tabulky. Názvy proměnných musí začínat jedním znakem (@). Názvy proměnných musí dodržovat pravidla pro identifikátory.
property_name
Vlastnost uživatelem definovaného typu
field_name
Veřejné pole uživatelem definovaného typu.
udt_name
Název uživatelem definovaného typu modulu CLR (Common Language Runtime).
{ . | :: }
Určuje metodu typu definice uživatele CLR. Pro instanci (nestatická) metoda použijte tečku (.). Pro statickou metodu použijte dvě dvojtečky (::). Chcete-li vyvolat metodu, vlastnost nebo pole uživatelem definovaného typu CLR, musíte mít oprávnění EXECUTE k typu.
method_name ( argument [ ,... n ] )
Metoda uživatelem definovaného typu, která přebírá jeden nebo více argumentů k úpravě stavu instance typu. Statické metody musí být veřejné.
@SQLCLR_local_variable
Proměnná, jejíž typ je umístěn v sestavení. Další informace najdete v tématu Koncepty programování integrace modulu CLR (Common Language Runtime).
mutator_method
Metoda v sestavení, která může změnit stav objektu. U této metody se použije SQLMethodAttribute.IsMutator.
{ += | -= | *= | /= | %= | &= | ^= | |= | |= }
Operátor složeného přiřazení:
-
+=- Přidat a přiřadit -
-=- Odečíst a přiřadit -
*=- Násobení a přiřazení -
/=- Dělit a přiřazovat -
%=– Modulo a přiřazení -
&=- Bitové aANDpřiřazování -
^=- Bitové aXORpřiřazování -
|=- Bitové aORpřiřazování
expression
Libovolný platný výraz.
cursor_variable
Název proměnné kurzoru. Pokud proměnná cílového kurzoru dříve odkazovala na jiný kurzor, předchozí odkaz se odebere.
cursor_name
Název kurzoru deklarovaného pomocí DECLARE CURSOR příkazu.
KURZOR
Určuje, že příkaz SET obsahuje deklaraci kurzoru.
SVITEK
Určuje, že kurzor podporuje všechny možnosti načtení: FIRST, LAST, NEXT, PRIOR, , RELATIVEa ABSOLUTE. Nelze zadat SCROLL , když zadáte FAST_FORWARDtaké .
FORWARD_ONLY
Určuje, že kurzor podporuje pouze FETCH NEXT tuto možnost. Kurzor se načte pouze v jednom směru od prvního do posledního řádku. Pokud zadáte FORWARD_ONLY bez STATIC, KEYSETnebo DYNAMIC klíčových slov, kurzor se implementuje jako DYNAMIC. Pokud neurčíte ani FORWARD_ONLYSCROLL, FORWARD_ONLY je výchozí, pokud nezadáte klíčová slova STATIC, KEYSETnebo DYNAMIC. Pro STATIC, KEYSETa DYNAMIC kurzory je SCROLL výchozí.
STATIC
Definuje kurzor, který vytvoří dočasnou kopii dat, která se použijí kurzorem. Všechny požadavky na kurzor jsou zodpovězeny z této dočasné tabulky v tempdb. V důsledku toho se změny základních tabulek po otevření kurzoru neprojeví v datech vrácených načtením kurzoru. A tento kurzor nepodporuje úpravy.
KEYSET
Určuje, že členství a pořadí řádků v kurzoru jsou při otevření kurzoru pevné. Sada klíčů, které jednoznačně identifikují řádky, je integrována do objektu keysettable v tempdb. Změny neklíčových hodnot v základních tabulkách provedené vlastníkem kurzoru nebo potvrzenými jinými uživateli jsou viditelné, když se vlastník kurzoru pohybuje kolem kurzoru. Vložení provedená jinými uživateli nejsou viditelná a vložení nelze vytvořit pomocí kurzoru serveru Transact-SQL.
Pokud je řádek odstraněn, pokus o načtení řádku vrátí @@FETCH_STATUS hodnotu -2. Aktualizace hodnot klíčů mimo kurzor jsou podobné odstranění starého řádku následovaného vložením nového řádku. Řádek s novými hodnotami není viditelný a pokusí se načíst řádek se starými hodnotami, které vrátí @@FETCH_STATUS hodnotu -2. Nové hodnoty jsou viditelné, pokud se aktualizace provede kurzorem zadáním WHERE CURRENT OF klauzule.
DYNAMIC
Definuje kurzor, který odráží všechny změny dat provedené v řádcích v sadě výsledků, když se vlastník kurzoru posune kolem kurzoru. Hodnoty dat, pořadí a členství v řádcích se můžou při každém načtení měnit. Dynamické kurzory nepodporují absolutní a relativní možnosti načtení.
FAST_FORWARD
Určuje kurzor s FORWARD_ONLYREAD_ONLY povolenými optimalizacemi.
FAST_FORWARD nelze zadat, pokud SCROLL je zadán také.
READ_ONLY
Zabrání tomu, aby se aktualizace neprováděly tímto kurzorem. Kurzor nelze odkazovat v WHERE CURRENT OF klauzuli v klauzuli nebo UPDATEDELETE příkazu. Tato možnost přepíše výchozí funkci kurzoru, která se má aktualizovat.
ZÁMKY SCROLLŮ
Určuje, že umisťované aktualizace nebo odstranění provedené kurzorem jsou zaručeny úspěšné. SQL Server uzamkne řádky při čtení kurzoru, aby se zajistila jejich dostupnost pro pozdější úpravy. Není možné určit SCROLL_LOCKS , kdy FAST_FORWARD je zadán.
OPTIMISTICKÝ
Určuje, že umístěné aktualizace nebo odstranění provedené kurzorem nebudou úspěšné, pokud byl řádek aktualizován od čtení do kurzoru. SQL Server nezamkne řádky při jejich čtení do kurzoru. Místo toho používá porovnání hodnot sloupců časového razítka nebo kontrolní součet, pokud tabulka nemá žádný sloupec časového razítka, aby určila, jestli byl řádek změněn po přečtení kurzoru. Pokud byl řádek změněn, pokus o umístění aktualizace nebo odstranění selže. Není možné určit OPTIMISTIC , kdy FAST_FORWARD je zadán.
TYPE_WARNING
Určuje, že se klientovi odešle zpráva s upozorněním, když je kurzor implicitně převeden z požadovaného typu na jiný.
ZA select_statement
Standardní SELECT příkaz, který definuje sadu výsledků kurzoru. Klíčová slova FOR BROWSEa INTO nejsou povolena v rámci select_statement deklarace kurzoru.
Použijete-li v DISTINCTUNION agregační výraz , GROUP BY, HAVINGnebo , nebo zahrnete agregační výraz, kurzor se vytvoří jako STATIC.
Pokud každá podkladová tabulka nemá jedinečný index a kurzor ISO SCROLL nebo pokud KEYSET je požadován Transact-SQL kurzor, kurzor je automaticky kurzorem STATIC .
Pokud select_statement obsahuje ORDER BY klauzuli, ve které sloupce nejsou jedinečné identifikátory řádků, DYNAMIC kurzor se převede na KEYSET kurzor nebo na STATIC kurzor, pokud KEYSET kurzor nelze otevřít. K tomuto procesu dochází také u kurzoru definovaného pomocí syntaxe ISO, ale bez klíčového STATIC slova.
POUZE ČTENÍ
Zabrání tomu, aby se aktualizace neprováděly tímto kurzorem. Kurzor nelze odkazovat v WHERE CURRENT OF klauzuli v klauzuli nebo UPDATEDELETE příkazu. Tato možnost přepíše výchozí funkci kurzoru, která se má aktualizovat. Toto klíčové slovo se liší od předchozího READ_ONLY , protože místo podtržítka mezi READ a ONLY.
AKTUALIZACE [ O column_name [ ,... n ] ]
Definuje aktualizovatelné sloupce v kurzoru. Pokud OF <column_name> [ , ...n ] je zadáno, povolují úpravy pouze sloupce uvedené v seznamu. Pokud není zadán žádný seznam, lze aktualizovat všechny sloupce, pokud kurzor není definován jako READ_ONLY.
Remarks
Jakmile je proměnná deklarována, inicializuje se na NULL.
SET Pomocí příkazu přiřaďte hodnotu, která není NULL deklarovanou proměnnou. Příkaz SET , který proměnné přiřadí hodnotu, vrátí jednu hodnotu. Při inicializaci více proměnných použijte samostatný SET příkaz pro každou místní proměnnou.
Proměnné můžete používat pouze ve výrazech, nikoli v názvech objektů nebo klíčových slovech. Chcete-li vytvořit dynamické příkazy Transact-SQL, použijte EXECUTE.
I když pravidla syntaxe pro SET @cursor_variable zahrnutí LOCAL a GLOBAL klíčová slova, při použití SET @cursor_variable = CURSOR... syntaxe se kurzor vytvoří jako GLOBAL nebo LOCAL, v závislosti na nastavení výchozí možnosti místní databáze kurzoru.
Proměnné kurzoru jsou vždy místní, i když odkazují na globální kurzor. Když proměnná kurzoru odkazuje na globální kurzor, má kurzor globální i místní odkaz kurzoru. Další informace naleznete v tématu Příklad D, použití set s globálním kurzorem.
Další informace naleznete v tématu DECLARE CURSOR (Transact-SQL).
Složený operátor přiřazení můžete použít kdekoli, kde máte přiřazení s výrazem na pravé straně operátoru, včetně proměnných a SET v UPDATEpříkazu , SELECTa RECEIVE příkazu.
Nepoužívejte proměnnou v SELECT příkazu ke zřetězení hodnot (to znamená k výpočtu agregovaných hodnot). K neočekávaným výsledkům dotazu může dojít, protože všechny výrazy v SELECT seznamu (včetně přiřazení) se nemusí pro každý výstupní řádek spouštět přesně jednou. Další informace naleznete v článku znalostní báze 287515.
Permissions
Vyžaduje členství ve veřejné roli. Všichni uživatelé můžou používat SET @local_variable.
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Tisk hodnoty proměnné inicializované pomocí set
Následující příklad vytvoří @myVar proměnnou, vloží řetězcovou hodnotu do proměnné a vytiskne hodnotu @myVar proměnné.
DECLARE @myVar CHAR(20);
SET @myVar = 'This is a test';
SELECT @myVar;
GO
B. Použití místní proměnné přiřazené hodnotě pomocí set v příkazu SELECT
Následující příklad vytvoří místní proměnnou s názvem @state a použije místní proměnnou SELECT v příkazu k vyhledání křestního jména (FirstName) a rodinného jména (LastName) všech zaměstnanců, kteří žijí ve stavu Oregon.
USE AdventureWorks2022;
GO
DECLARE @state CHAR(25);
SET @state = N'Oregon';
SELECT RTRIM(FirstName) + ' ' + RTRIM(LastName) AS Name, City
FROM HumanResources.vEmployee
WHERE StateProvinceName = @state;
GO
C. Použití složeného přiřazení pro místní proměnnou
Následující dva příklady vytvoří stejný výsledek. Každý příklad vytvoří místní proměnnou s názvem @NewBalance, vynásobí ji 10, pak zobrazí novou hodnotu místní proměnné v SELECT příkazu. Druhý příklad používá operátor složeného přiřazení.
/* Example one */
DECLARE @NewBalance INT;
SET @NewBalance = 10;
SET @NewBalance = @NewBalance * 10;
SELECT @NewBalance;
GO
/* Example Two */
DECLARE @NewBalance INT = 10;
SET @NewBalance *= 10;
SELECT @NewBalance;
GO
D. Použití funkce SET s globálním kurzorem
Následující příklad vytvoří místní proměnnou a pak nastaví proměnnou kurzoru na globální název kurzoru.
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;
GO
--There is now only a LOCAL variable reference
--(@my_variable) to the my_cursor cursor.
E. Definování kurzoru pomocí set
Následující příklad používá příkaz SET k definování kurzoru.
DECLARE @CursorVar CURSOR;
SET @CursorVar = CURSOR SCROLL DYNAMIC
FOR
SELECT LastName, FirstName
FROM AdventureWorks2022.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;
GO
F. Přiřazení hodnoty z dotazu
Následující příklad používá dotaz k přiřazení hodnoty proměnné.
USE AdventureWorks2022;
GO
DECLARE @rows INT;
SET @rows = (SELECT COUNT(*) FROM Sales.Customer);
SELECT @rows;
GO
G. Přiřazení hodnoty proměnné typu definované uživatelem úpravou vlastnosti typu
Následující příklad nastaví hodnotu pro uživatelem definovaný typ (UDT) Point úpravou hodnoty vlastnosti X typu.
DECLARE @p Point;
SET @p.X = @p.X + 1.1;
SELECT @p;
GO
Další informace o vytváření Point UDT odkazovaných v tomto příkladu a následujících příkladech najdete v článku Vytváření typů User-Defined.
H. Přiřazení hodnoty proměnné typu definované uživatelem vyvoláním metody typu
Následující příklad nastaví hodnotu pro bod typu definovaný uživatelem vyvoláním metody SetXY typu.
DECLARE @p Point;
SET @p=point.SetXY(23.5, 23.5);
I. Vytvoření proměnné pro typ CLR a volání metody mutatoru
Následující příklad vytvoří proměnnou pro typ Pointa potom spustí mutator metoda v 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);
Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
J. Tisk hodnoty proměnné inicializované pomocí set
Následující příklad vytvoří @myVar proměnnou, vloží řetězcovou hodnotu do proměnné a vytiskne hodnotu @myVar proměnné.
DECLARE @myVar CHAR(20);
SET @myVar = 'This is a test';
SELECT TOP 1 @myVar FROM sys.databases;
K. Použití místní proměnné přiřazené hodnotě pomocí set v příkazu SELECT
Následující příklad vytvoří místní proměnnou s názvem @dept a použije tuto místní proměnnou SELECT v příkazu k vyhledání jména (FirstName) a rodinného jména (LastName) všech zaměstnanců, kteří pracují v Marketing oddělení.
DECLARE @dept CHAR(25);
SET @dept = N'Marketing';
SELECT RTRIM(FirstName) + ' ' + RTRIM(LastName) AS Name
FROM DimEmployee
WHERE DepartmentName = @dept;
L. Použití složeného přiřazení pro místní proměnnou
Následující dva příklady vytvoří stejný výsledek. Vytvoří místní proměnnou s názvem @NewBalance, vynásobí ji 10 a zobrazí novou hodnotu místní proměnné v SELECT příkazu. Druhý příklad používá operátor složeného přiřazení.
/* Example one */
DECLARE @NewBalance INT;
SET @NewBalance = 10;
SET @NewBalance = @NewBalance * 10;
SELECT TOP 1 @NewBalance
FROM sys.tables;
/* Example Two */
DECLARE @NewBalance INT = 10;
SET @NewBalance *= 10;
SELECT TOP 1 @NewBalance
FROM sys.tables;
M. Přiřazení hodnoty z dotazu
Následující příklad používá dotaz k přiřazení hodnoty proměnné.
-- Uses AdventureWorks
DECLARE @rows INT;
SET @rows = (SELECT COUNT(*) FROM dbo.DimCustomer);
SELECT TOP 1 @rows FROM sys.tables;
Související obsah
- Složené operátory (Transact-SQL)
- DECLARE @local_variable (Transact-SQL)
- EXECUTE (Transact-SQL)
- SELECT (Transact-SQL)
- Příkazy SET (Transact-SQL)