Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy do:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Endpoint analityki SQL w Microsoft Fabric
Magazyn w Microsoft Fabric
Baza danych SQL w Microsoft Fabric
Ustawia zmienną lokalną na wartość wyrażenia.
W przypadku przypisywania zmiennych zalecamy użycie SET @local_variable zamiast polecenia SELECT @local_variable.
Transact-SQL konwencje składni
Syntax
SELECT { @local_variable { = | += | -= | *= | /= | %= | &= | ^= | |= } expression }
[ ,...n ] [ ; ]
Arguments
@ local_variable
Zadeklarowana zmienna, dla której ma zostać przypisana wartość.
{ = | += | -= | *= | /= | %= | &= | ^= | |=}
Przypisz wartość po prawej stronie do zmiennej po lewej stronie.
Operator przypisania złożonego:
| Operator | Action |
|---|---|
| = | Przypisuje wyrażenie, które następuje poniżej, do zmiennej. |
| += | Dodawanie i przypisywanie |
| -= | Odejmij i przypisz |
| *= | Mnożenie i przypisywanie |
| /= | Dzielenie i przypisywanie |
| %= | Modulo i przypisanie |
| &= | Bitowe AND i przypisz |
| ^= | Bitowe XOR i przypisywanie |
| |= | Bitowe OR i przypisz |
expression
Dowolne prawidłowe wyrażenie. Obejmuje to podzapytywanie skalarne.
Remarks
Select @local_variable jest zwykle używany do zwracania pojedynczej wartości do zmiennej. Jeśli jednak wyrażenie jest nazwą kolumny, może zwrócić wiele wartości. Jeśli instrukcja SELECT zwraca więcej niż jedną wartość, zmienna zostanie przypisana do ostatniej zwracanej wartości.
Jeśli instrukcja SELECT nie zwraca żadnych wierszy, zmienna zachowuje swoją wartość bieżącą. Jeśli wyrażenie jest podzapytaniem skalarnym, które nie zwraca żadnej wartości, zmienna jest ustawiona na wartość NULL.
Jedna instrukcja SELECT może zainicjować wiele zmiennych lokalnych.
Note
Nie można użyć instrukcji SELECT zawierającej przypisanie zmiennej do wykonywania typowych operacji pobierania zestawu wyników.
Examples
A. Użyj polecenia SELECT @local_variable , aby zwrócić pojedynczą wartość
W poniższym przykładzie zmienna @var1 jest przypisywana jako wartość "Nazwa ogólna". Zapytanie względem Store tabeli nie zwraca żadnych wierszy, ponieważ określona wartość CustomerID nie istnieje w tabeli. Zmienna zachowuje wartość "Nazwa ogólna".
W tym przykładzie użyto przykładowej AdventureWorksLT bazy danych, aby uzyskać więcej informacji, zobacz Przykładowe bazy danych AdventureWorks. Baza AdventureWorksLT danych jest używana jako przykładowa baza danych dla usługi Azure SQL Database.
-- Uses AdventureWorks2022LT
DECLARE @var1 VARCHAR(30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000; --Value does not exist
SELECT @var1 AS 'ProductName';
Oto zestaw wyników.
ProductName
------------------------------
Generic Name
B. Użyj polecenia SELECT @local_variable , aby zwrócić wartość null
W poniższym przykładzie podzapytywanie służy do przypisywania wartości do @var1elementu . Ponieważ wartość żądana dla CustomerID elementu nie istnieje, podzapytywanie nie zwraca żadnej wartości, a zmienna jest ustawiona na NULLwartość .
W tym przykładzie użyto przykładowej AdventureWorksLT bazy danych, aby uzyskać więcej informacji, zobacz Przykładowe bazy danych AdventureWorks. Baza AdventureWorksLT danych jest używana jako przykładowa baza danych dla usługi Azure SQL Database.
-- Uses AdventureWorksLT
DECLARE @var1 VARCHAR(30);
SELECT @var1 = 'Generic Name';
SELECT @var1 = (SELECT [Name]
FROM SalesLT.Product
WHERE ProductID = 1000000); --Value does not exist
SELECT @var1 AS 'Company Name';
Oto zestaw wyników.
Company Name
----------------------------
NULL
C. Antywzorcowe używanie przypisania zmiennej cyklicznego
Unikaj następującego wzorca w przypadku cyklicznego używania zmiennych i wyrażeń:
SELECT @Var = <expression containing @Var>
FROM
...
W takim przypadku nie ma gwarancji, że @Var zostanie on zaktualizowany według wiersza. Na przykład @Var można ustawić wartość początkową @Var dla wszystkich wierszy. Dzieje się tak, ponieważ kolejność i częstotliwość przetwarzania przypisań nie jest określona. Dotyczy to wyrażeń zawierających łączenie ciągów zmiennych, jak pokazano poniżej, ale także w wyrażeniach ze zmiennymi nieciągowymi lub += operatorami stylów. Zamiast tego należy używać funkcji agregacji dla operacji opartej na zestawie zamiast operacji wiersz po wierszu.
W przypadku łączenia ciągów należy rozważyć STRING_AGG funkcję wprowadzoną w programie SQL Server 2017 (14.x), w scenariuszach, w których wymagane jest uporządkowane łączenie ciągów. Aby uzyskać więcej informacji, zobacz STRING_AGG (Transact-SQL).
Przykłady kodu w tym artykule korzystają z przykładowej bazy danych AdventureWorks2025 lub AdventureWorksDW2025, którą można pobrać ze strony głównej Przykładów programu Microsoft SQL Server i projektów społeczności.
Przykładem, aby uniknąć sytuacji, w której użycie polecenia ORDER BY w celu uporządkowania łączenia powoduje, że lista jest niekompletna:
DECLARE @List AS nvarchar(max);
SELECT @List = CONCAT(COALESCE(@List + ', ',''), p.LastName)
FROM Person.Person AS p
WHERE p.FirstName = 'William'
ORDER BY p.BusinessEntityID;
SELECT @List;
Zestaw wyników:
(No column name)
---
Walker
Zamiast tego rozważ:
DECLARE @List AS nvarchar(max);
SELECT @List = STRING_AGG(p.LastName,', ') WITHIN GROUP (ORDER BY p.BusinessEntityID)
FROM Person.Person AS p
WHERE p.FirstName = 'William';
SELECT @List;
Zestaw wyników:
(No column name)
---
Vong, Conner, Hapke, Monroe, Richter, Sotelo, Vong, Ngoh, White, Harris, Martin, Thompson, Martinez, Robinson, Clark, Rodriguez, Smith, Johnson, Williams, Jones, Brown, Davis, Miller, Moore, Taylor, Anderson, Thomas, Lewis, Lee, Walker
Zobacz także
- DECLARE @local_variable (Transact-SQL)
- Wyrażenia (Transact-SQL)
- Operatory złożone (Transact-SQL)
- WYBIERZ (Transact-SQL)