SQL Server/T-SQL/Transact SQL/Set Variables
Содержание
Assign value returned from a aggregate function to a variable with set statement
5>
6> CREATE TABLE OrderDetails (
7> OrderID int NOT NULL ,
8> ProductID int NOT NULL ,
9> UnitPrice money NOT NULL DEFAULT (0),
10> Quantity smallint NOT NULL DEFAULT (1),
11> Discount real NOT NULL DEFAULT (0)
12> )
13> GO
1> INSERT OrderDetails VALUES(10248,11,14,12,0)
2> INSERT OrderDetails VALUES(10248,42,9.8,10,0)
3> INSERT OrderDetails VALUES(10248,72,34.8,5,0)
4> INSERT OrderDetails VALUES(10249,14,18.6,9,0)
5> INSERT OrderDetails VALUES(10249,51,42.4,40,0)
6> INSERT OrderDetails VALUES(10250,41,7.7,10,0)
7> INSERT OrderDetails VALUES(10250,51,42.4,35,0.15)
8> INSERT OrderDetails VALUES(10250,65,16.8,15,0.15)
9> INSERT OrderDetails VALUES(10251,22,16.8,6,0.05)
10> INSERT OrderDetails VALUES(10251,57,15.6,15,0.05)
11> go
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
(1 rows affected)
1>
2>
3> DECLARE @Test money
4>
5> SET @Test = (SELECT MAX(UnitPrice) FROM OrderDetails)
6> SELECT @Test
7> GO
---------------------
42.4000
(1 rows affected)
1>
2> drop table OrderDetails;
3> GO
Assign value to a variable
1> create table employee(
2> ID int,
3> name nvarchar (10),
4> salary int,
5> start_date datetime,
6> city nvarchar (10),
7> region char (1))
8> GO
1>
2> insert into employee (ID, name, salary, start_date, city, region)
3> values (1, "Jason", 40420, "02/01/94", "New York", "W")
4> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (2, "Robert",14420, "01/02/95", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (3, "Celia", 24020, "12/03/96", "Toronto", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (4, "Linda", 40620, "11/04/97", "New York", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (5, "David", 80026, "10/05/98", "Vancouver","W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (6, "James", 70060, "09/06/99", "Toronto", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (7, "Alison",90620, "08/07/00", "New York", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (8, "Chris", 26020, "07/08/01", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (9, "Mary", 60020, "06/09/02", "Toronto", "W")
3> GO
(1 rows affected)
1>
2> select * from employee
3> GO
ID name salary start_date city region
----------- ---------- ----------- ----------------------- ---------- ------
1 Jason 40420 1994-02-01 00:00:00.000 New York W
2 Robert 14420 1995-01-02 00:00:00.000 Vancouver N
3 Celia 24020 1996-12-03 00:00:00.000 Toronto W
4 Linda 40620 1997-11-04 00:00:00.000 New York N
5 David 80026 1998-10-05 00:00:00.000 Vancouver W
6 James 70060 1999-09-06 00:00:00.000 Toronto N
7 Alison 90620 2000-08-07 00:00:00.000 New York W
8 Chris 26020 2001-07-08 00:00:00.000 Vancouver N
9 Mary 60020 2002-06-09 00:00:00.000 Toronto W
(9 rows affected)
1>
2> DECLARE @ValueToUpdate VARCHAR(10)
3>
4> SET @ValueToUpdate = "Mick Bagram"
5>
6> UPDATE Employee
7> SET Name = @ValueToUpdate
8> GO
(9 rows affected)
1>
2> select * from employee
3> GO
ID name salary start_date city region
----------- ---------- ----------- ----------------------- ---------- ------
1 Mick Bagra 40420 1994-02-01 00:00:00.000 New York W
2 Mick Bagra 14420 1995-01-02 00:00:00.000 Vancouver N
3 Mick Bagra 24020 1996-12-03 00:00:00.000 Toronto W
4 Mick Bagra 40620 1997-11-04 00:00:00.000 New York N
5 Mick Bagra 80026 1998-10-05 00:00:00.000 Vancouver W
6 Mick Bagra 70060 1999-09-06 00:00:00.000 Toronto N
7 Mick Bagra 90620 2000-08-07 00:00:00.000 New York W
8 Mick Bagra 26020 2001-07-08 00:00:00.000 Vancouver N
9 Mick Bagra 60020 2002-06-09 00:00:00.000 Toronto W
(9 rows affected)
1>
2>
3>
4> drop table employee
5> GO
1>
Set value from select statement to a variable
1> create table employee(
2> ID int,
3> name nvarchar (10),
4> salary int,
5> start_date datetime,
6> city nvarchar (10),
7> region char (1))
8> GO
1>
2> insert into employee (ID, name, salary, start_date, city, region)
3> values (1, "Jason", 40420, "02/01/94", "New York", "W")
4> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (2, "Robert",14420, "01/02/95", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (3, "Celia", 24020, "12/03/96", "Toronto", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (4, "Linda", 40620, "11/04/97", "New York", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (5, "David", 80026, "10/05/98", "Vancouver","W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (6, "James", 70060, "09/06/99", "Toronto", "N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (7, "Alison",90620, "08/07/00", "New York", "W")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (8, "Chris", 26020, "07/08/01", "Vancouver","N")
3> GO
(1 rows affected)
1> insert into employee (ID, name, salary, start_date, city, region)
2> values (9, "Mary", 60020, "06/09/02", "Toronto", "W")
3> GO
(1 rows affected)
1>
2> select * from employee
3> GO
ID name salary start_date city region
----------- ---------- ----------- ----------------------- ---------- ------
1 Jason 40420 1994-02-01 00:00:00.000 New York W
2 Robert 14420 1995-01-02 00:00:00.000 Vancouver N
3 Celia 24020 1996-12-03 00:00:00.000 Toronto W
4 Linda 40620 1997-11-04 00:00:00.000 New York N
5 David 80026 1998-10-05 00:00:00.000 Vancouver W
6 James 70060 1999-09-06 00:00:00.000 Toronto N
7 Alison 90620 2000-08-07 00:00:00.000 New York W
8 Chris 26020 2001-07-08 00:00:00.000 Vancouver N
9 Mary 60020 2002-06-09 00:00:00.000 Toronto W
(9 rows affected)
1>
2> DECLARE @total dec(12,2), @num int
3>
4> SET @total = (SELECT SUM(Salary) FROM Employee)
5>
6> SET @num = (SELECT COUNT(ID) FROM Employee)
7>
8> SELECT @total "Total",
9> @num "Number of employees",
10> @total/@num "Average"
11> GO
Total Number of employees Average
-------------- ------------------- -------------------------
446226.00 9 49580.6666666666666
(1 rows affected)
1>
2> drop table employee
3> GO
1>
Using SET to Assign Variables
1>
2> -- Using SET to Assign Variables
3>
4> -- Capture the return value for the same function.
5>
6> DECLARE @MyNumber Int, @MyResult Int
7> SET @MyNumber = 144
8>
9> -- Assign the function result to the variable:
10> SET @MyResult = SQRT(@MyNumber)
11> -- Return the variable value
12> SELECT @MyResult
13> GO
-----------
12
(1 rows affected)
1>