Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Beállítja a megadott helyi változót, amelyet korábban az DECLARE @local_variable utasítással hoztak létre, a megadott értékre.
Transact-SQL szintaxis konvenciók
Syntax
Szintaxis az SQL Serverhez, az Azure SQL Database-hez és a felügyelt Azure SQL-példányhoz:
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 ] ] } ]
}
}
}
Az Azure Synapse Analytics és a párhuzamos adattárház és a Microsoft Fabric szintaxisa:
SET @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression
Arguments
@local_variable
Tetszőleges típusú változó neve, kivéve a kurzort, a szöveget, az ntextet, a képet vagy a táblázatot. A változóneveknek egy előjellel (@) kell kezdődniük. A változóneveknek az azonosítókra vonatkozó szabályokat kell követnie.
property_name
Felhasználó által definiált típusú tulajdonság.
field_name
Felhasználó által definiált típusú nyilvános mező.
udt_name
A felhasználó által definiált általános nyelvi futtatókörnyezet (CLR) neve.
{ . | :: }
A CLR felhasználó által definiált típusának metódusát adja meg. Egy példány (nem statikus) metódus esetén használjon pont (.) elemet. Statikus módszer esetén használjon két kettőspontot (::). A felhasználó által definiált CLR-típus metódusának, tulajdonságának vagy mezőjének meghívásához végrehajtási engedéllyel kell rendelkeznie a típushoz.
method_name ( argumentum [ ,... n ] )
Felhasználó által definiált típusú metódus, amely egy vagy több argumentumot vesz igénybe egy adott típusú példány állapotának módosításához. A statikus módszereknek nyilvánosnak kell lenniük.
@SQLCLR_local_variable
Olyan változó, amelynek típusa egy szerelvényben található. További információkért lásd a common language runtime (CLR) integrációs programozási fogalmakat.
mutator_method
Egy metódus a szerelvényben, amely megváltoztathatja az objektum állapotát. Erre a metódusra az SQLMethodAttribute.IsMutator van alkalmazva.
{ += | -= | *= | /= | %= | &= | ^= | |= }
Összetett hozzárendelés operátora:
-
+=– Hozzáadás és hozzárendelés -
-=- Kivonás és hozzárendelés -
*=- Szorzás és hozzárendelés -
/=– Osztás és hozzárendelés -
%=- Modulo és hozzárendelés -
&=- BitenkéntiANDés hozzárendelés -
^=- BitenkéntiXORés hozzárendelés -
|=- BitenkéntiORés hozzárendelés
expression
Bármilyen érvényes kifejezés.
cursor_variable
A kurzorváltozó neve. Ha a célkurzor változó korábban egy másik kurzorra hivatkozott, az előző hivatkozás el lesz távolítva.
cursor_name
Az utasítással DECLARE CURSOR deklarált kurzor neve.
KURZOR
Azt adja meg, hogy az SET utasítás egy kurzor deklarációját tartalmazza.
KÉZIRATTEKERCS
Megadja, hogy a kurzor támogatja-e az összes beolvasási beállítást: FIRST, LAST, NEXT, PRIOR, RELATIVEés ABSOLUTE. Nem adhatja meg SCROLL , hogy mikor is adja meg a elemet FAST_FORWARD.
FORWARD_ONLY
Azt adja meg, hogy a kurzor csak a FETCH NEXT beállítást támogatja. A kurzor csak egy irányba lesz lekérve, az elsőtől az utolsóig. Ha a kurzort a , FORWARD_ONLYvagy STATIC kulcsszavak nélkül adja megKEYSET, a kurzor a következőképpen lesz implementálvaDYNAMICDYNAMIC. Ha nem adja meg az FORWARD_ONLYSCROLLFORWARD_ONLY alapértelmezett értéket, vagy ha nem adja meg a kulcsszavakat STATIC, KEYSETvagy .DYNAMIC A STATIC( és KEYSETDYNAMIC a kurzor ) SCROLL az alapértelmezett érték.
STATIC
Definiál egy kurzort, amely ideiglenes másolatot készít a kurzor által használandó adatokról. A kurzorhoz érkező összes kérésre a rendszer a következő ideiglenes táblázatból tempdbválaszol: . Ennek eredményeképpen a kurzor megnyitása után az alaptáblák módosításai nem jelennek meg a kurzorhoz beolvasott beolvasások által visszaadott adatokban. És ez a kurzor nem támogatja a módosításokat.
KEYSET
Megadja, hogy a kurzorban lévő sorok tagsága és sorrendje rögzített legyen a kurzor megnyitásakor. A sorokat egyedileg azonosító kulcsok készlete a következő kulcskészletbe tempdbvan beépítve: . Az alaptáblák nem kulcsértékeinek módosítása a kurzor tulajdonosa által vagy más felhasználók által véglegesített módon, a kurzor tulajdonosa görgetve látható a kurzor körül. A más felhasználók által készített beszúrások nem láthatók, és a beszúrások nem hozhatók létre Transact-SQL kiszolgálói kurzoron keresztül.
Ha töröl egy sort, a sor beolvasására tett kísérlet a következőt @@FETCH_STATUSadja vissza-2: A kurzoron kívüli kulcsértékek frissítése hasonló a régi sor törléséhez, amelyet az új sor beszúrása követ. Az új értékeket tartalmazó sor nem látható, és megpróbálja beolvasni a sort a régi értékekkel @@FETCH_STATUS-2. Az új értékek akkor jelennek meg, ha a frissítés a kurzoron keresztül történik a WHERE CURRENT OF záradék megadásával.
DYNAMIC
Olyan kurzort definiál, amely az eredményhalmaz soraiban végrehajtott összes adatmódosítást tükrözi, miközben a kurzor tulajdonosa görget a kurzor körül. A sorok adatértékei, sorrendje és tagsága minden beolvasáskor változhat. A dinamikus kurzorok nem támogatják az abszolút és relatív beolvasási beállításokat.
FAST_FORWARD
Egy , kurzort ad FORWARD_ONLYmeg, READ_ONLY amelyen engedélyezve van az optimalizálás.
FAST_FORWARD nem adható meg, ha SCROLL szintén meg van adva.
READ_ONLY
Megakadályozza, hogy a frissítések ezen a kurzoron keresztül legyenek készítve. A kurzorra nem lehet hivatkozni egy WHERE CURRENT OF záradékban vagy UPDATE utasításbanDELETE. Ez a beállítás felülírja a frissíteni kívánt kurzor alapértelmezett képességét.
GÖRCSZÁRAK
Megadja, hogy a kurzoron keresztül végrehajtott helyhez kötött frissítések vagy törlések garantáltan sikeresek legyenek. Az SQL Server zárolja a sorokat, miközben beolvassa őket a kurzorba, így biztosítva azok későbbi módosításokhoz való rendelkezésre állását. Azt sem adhatja meg SCROLL_LOCKS , hogy mikor FAST_FORWARD van megadva.
OPTIMISTA
Azt adja meg, hogy a kurzoron keresztül elhelyezett frissítések vagy törlések nem lesznek sikeresek, ha a sor frissült a kurzorba való beolvasás óta. Az SQL Server nem zárolja a sorokat, mivel beolvassa őket a kurzorba. Ehelyett az időbélyeg oszlopértékeinek összehasonlítását vagy ellenőrzőösszeg-értéket használ, ha a táblázat nem tartalmaz időbélyegoszlopot, annak megállapítására, hogy a sor módosult-e a kurzorba való beolvasás után. Ha a sor módosult, a megkísérelt frissítés vagy törlés meghiúsul. Azt sem adhatja meg OPTIMISTIC , hogy mikor FAST_FORWARD van megadva.
TYPE_WARNING
Azt adja meg, hogy a rendszer figyelmeztető üzenetet küld az ügyfélnek, amikor a kurzor implicit módon konvertálódik a kért típusról egy másikra.
EZÉRT select_statement
A kurzor eredményhalmazát meghatározó standard SELECT utasítás. A kulcsszavak FOR BROWSE, és INTO nem engedélyezettek a kurzordeklaráció select_statement .
DISTINCTHa a select_list UNIONGROUP BYaggregátumkifejezést használHAVING, akkor a kurzor a következőképpen jön létre.STATIC
Ha az egyes mögöttes táblák nem rendelkeznek egyedi indexszel és ISO-kurzorlal SCROLL , vagy ha Transact-SQL KEYSET kurzort kérnek, a kurzor automatikusan kurzor lesz STATIC .
Ha select_statement tartalmaz egy ORDER BY záradékot, amelyben az oszlopok nem egyedi sorazonosítók, DYNAMIC a kurzor kurzorrá vagy kurzorrá alakul KEYSET , STATIC ha KEYSET a kurzor nem nyitható meg. Ez a folyamat az ISO-szintaxissal definiált, de a STATIC kulcsszó nélküli kurzor esetében is megtörténik.
CSAK OLVASHATÓ
Megakadályozza, hogy a frissítések ezen a kurzoron keresztül legyenek készítve. A kurzorra nem lehet hivatkozni egy WHERE CURRENT OF záradékban vagy UPDATE utasításbanDELETE. Ez a beállítás felülírja a frissíteni kívánt kurzor alapértelmezett képességét. Ez a kulcsszó a korábbiaktól READ_ONLY eltérő, mivel a kettő között READONLYaláhúzásjel helyett szóköz van.
FRISSÍTÉS [ A column_name [ ,... n ] ] ]
A kurzoron belüli frissíthető oszlopokat definiálja. Ha OF <column_name> [ , ...n ] meg van adva, csak a felsorolt oszlopok engedélyezik a módosításokat. Ha nincs megadva lista, az összes oszlop frissíthető, kivéve, ha a kurzor a következőképpen van definiálva READ_ONLY.
Remarks
A változó deklarálása után a változó inicializálva lesz.NULL
SET Az utasítással olyan értéket rendelhet hozzá, amely nem NULL deklarált változóhoz van rendelve. Az SET az utasítás, amely egy értéket rendel a változóhoz, egyetlen értéket ad vissza. Ha több változót inicializál, minden helyi változóhoz használjon külön SET utasítást.
A változókat csak kifejezésekben használhatja, objektumnevek vagy kulcsszavak helyett nem. Dinamikus Transact-SQL utasítások létrehozásához használja a következőt EXECUTE: .
Bár a szintaxis szabályai SET @cursor_variable tartalmazzák a kulcsszavakat és LOCAL a GLOBAL szintaxist, a SET @cursor_variable = CURSOR... kurzor az alapértelmezett beállítástól függően a helyi kurzoradatbázis beállításától függően jön létre GLOBALLOCAL.
A kurzorváltozók mindig helyiek, még akkor is, ha globális kurzorra hivatkoznak. Ha egy kurzorváltozó globális kurzorra hivatkozik, a kurzor globális és helyi kurzorhivatkozással is rendelkezik. További információ: D példa: SET használata globális kurzorral.
További információ: DEKLARÁLT KURZOR (Transact-SQL).
Az összetett hozzárendelés operátort bárhol használhatja, ahol van egy hozzárendelés az operátor jobb oldalán található kifejezéssel, beleértve a változókat, valamint egy SET , UPDATEés SELECT egy utasítástRECEIVE.
Ne használjon változót egy SELECT utasításban az értékek összefűzésére (vagyis az összesített értékek kiszámítására). Váratlan lekérdezési eredmények fordulhatnak elő, mert a listában szereplő összes kifejezés (beleértve a SELECT hozzárendeléseket is) nem feltétlenül fut minden kimeneti sor esetében pontosan egyszer. További információ: KB 287515.
Permissions
A nyilvános szerepkörhöz tagságra van szükség. Minden felhasználó használhatja SET @local_variable.
Examples
A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.
A. A SET használatával inicializált változó értékének nyomtatása
Az alábbi példa létrehozza a változót @myVar , sztringértéket helyez a változóba, és kinyomtatja a @myVar változó értékét.
DECLARE @myVar CHAR(20);
SET @myVar = 'This is a test';
SELECT @myVar;
GO
B. Értékhez hozzárendelt helyi változó használata a SET függvény használatával SELECT utasításban
Az alábbi példában létrehozunk egy helyi változót, @state amely egy utasításban SELECT a helyi változót használja, hogy megkeresse az összes alkalmazott utónevét (FirstName) és családnevét LastName(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. Összetett hozzárendelés használata helyi változóhoz
Az alábbi két példa ugyanazt az eredményt adja. Minden példa létrehoz egy helyi változót, amelyet megszoroz@NewBalance10, majd egy utasításban SELECT megjeleníti a helyi változó új értékét. A második példa egy összetett hozzárendelési operátort használ.
/* 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. A SET használata globális kurzorral
Az alábbi példa létrehoz egy helyi változót, majd beállítja a kurzor változót a globális kurzornévre.
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. Kurzor definiálása a SET használatával
Az alábbi példa a kurzor definiálásához használja az SET utasítást.
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. Érték hozzárendelése lekérdezésből
Az alábbi példa egy lekérdezéssel rendel egy értéket egy változóhoz.
USE AdventureWorks2022;
GO
DECLARE @rows INT;
SET @rows = (SELECT COUNT(*) FROM Sales.Customer);
SELECT @rows;
GO
G. Érték hozzárendelése felhasználó által definiált típusváltozóhoz a típus tulajdonságának módosításával
Az alábbi példa a felhasználó által definiált típus (UDT) Point értékét állítja be a típus tulajdonságának X módosításával.
DECLARE @p Point;
SET @p.X = @p.X + 1.1;
SELECT @p;
GO
További információ az ebben a Point példában hivatkozott UDT létrehozásáról, valamint az alábbi példákról a User-Defined-típusok létrehozása című cikkben.
H. Érték hozzárendelése felhasználó által definiált típusváltozóhoz a típus metódusának meghívásával
Az alábbi példa a felhasználó által definiált típuspont értékét állítja be a típus metódusának SetXY meghívásával.
DECLARE @p Point;
SET @p=point.SetXY(23.5, 23.5);
I. Változó létrehozása CLR-típushoz és mutációs metódus meghívása
Az alábbi példa létrehoz egy változót a típushoz Point, majd végrehajt egy mutációs metódust a következőben 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éldák: Azure Synapse Analytics and Analytics Platform System (PDW)
A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.
J. A SET használatával inicializált változó értékének nyomtatása
Az alábbi példa létrehozza a változót @myVar , sztringértéket helyez a változóba, és kinyomtatja a @myVar változó értékét.
DECLARE @myVar CHAR(20);
SET @myVar = 'This is a test';
SELECT TOP 1 @myVar FROM sys.databases;
K. Értékhez hozzárendelt helyi változó használata a SET függvény használatával SELECT utasításban
Az alábbi példában létrehozunk egy helyi változót, amely egy @dept utasításban ezt a helyi változót SELECT használja a részlegen FirstName dolgozó összes alkalmazott utónevének (LastName) és családnevének (Marketing) megkereséséhez.
DECLARE @dept CHAR(25);
SET @dept = N'Marketing';
SELECT RTRIM(FirstName) + ' ' + RTRIM(LastName) AS Name
FROM DimEmployee
WHERE DepartmentName = @dept;
L. Összetett hozzárendelés használata helyi változóhoz
Az alábbi két példa ugyanazt az eredményt adja. Létrehoznak egy helyi változót, @NewBalanceamelyet megszoroznak 10 , és egy SELECT utasításban megjelenítik a helyi változó új értékét. A második példa egy összetett hozzárendelési operátort használ.
/* 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. Érték hozzárendelése lekérdezésből
Az alábbi példa egy lekérdezéssel rendel egy értéket egy változóhoz.
-- Uses AdventureWorks
DECLARE @rows INT;
SET @rows = (SELECT COUNT(*) FROM dbo.DimCustomer);
SELECT TOP 1 @rows FROM sys.tables;