SQL Server/T-SQL Tutorial/Transact SQL/Declare

Материал из SQL эксперт
Перейти к: навигация, поиск

Declare a table type variable and query it

   <source lang="sql">

7> CREATE TABLE Orders ( 8> OrderID int NOT NULL , 9> CustomerID nchar (5) NULL , 10> EmployeeID int NULL , 11> OrderDate datetime NULL , 12> RequiredDate datetime NULL , 13> ShippedDate datetime NULL , 14> ShipVia int NULL , 15> Freight money NULL DEFAULT (0), 16> ShipName nvarchar (40) NULL , 17> ShipAddress nvarchar (60) NULL , 18> ShipCity nvarchar (15) NULL , 19> ShipRegion nvarchar (15) NULL , 20> ShipPostalCode nvarchar (10) NULL , 21> ShipCountry nvarchar (15) NULL 22> ) 23> GO 1> 2> DECLARE @MyTable Table 3> ( 4> OrderID int, 5> CustomerID char(5) 6> ) 7> 8> INSERT INTO @MyTable 9> SELECT OrderID, CustomerID 10> FROM Orders 11> WHERE OrderID BETWEEN 10240 AND 10250 12> 13> SELECT * 14> FROM @MyTable 15> GO (0 rows affected) OrderID CustomerID


----------

(0 rows affected) 1> 2> drop table orders; 3> GO 1></source>


DECLARE @Out Int

   <source lang="sql">

3> 4> 5> 6> CREATE TABLE Product( 7> ProductID int NOT NULL, 8> Name nvarchar(25) NOT NULL, 9> ProductNumber nvarchar(25) , 10> Color nvarchar(15) NULL, 11> StandardCost money NOT NULL, 12> Size nvarchar(5) NULL, 13> Weight decimal(8, 2) NULL, 14> ProductLine nchar(20) NULL, 15> SellStartDate datetime NOT NULL, 16> SellEndDate datetime NULL 17> ) 18> GO 1> insert into Product values(1,"Product A", "1","Red",123.123,"1",1,"ProductLine A","1999-03-22","2000-03-22"); 2> GO (1 rows affected) 1> insert into Product values(2,"Product B", "2","Yellow",234.234,"1",3,"ProductLine B","2000-03-22","2001-03-22"); 2> GO (1 rows affected) 1> insert into Product values(3,"Product C", "3","Pink",345.345,"1",3,"ProductLine V","2001-09-22","2006-02-22"); 2> GO (1 rows affected) 1> insert into Product values(4,"Product D", "4","White",456.456,"1",4,"ProductLine D","2002-08-22","2006-03-22"); 2> GO (1 rows affected) 1> insert into Product values(5,"Product E", "5","Black",567.567,"1",5,"ProductLine E","2003-01-22","2003-04-22"); 2> GO (1 rows affected) 1> insert into Product values(6,"Product F", "6","Blue",678.678,"1",6,"ProductLine W","2004-02-22","2005-05-22"); 2> GO (1 rows affected) 1> insert into Product values(7,"Product G", "7","Drak",789.789,"1",7,"ProductLine Q","2005-03-22","2006-03-22"); 2> GO (1 rows affected) 1> insert into Product values(8,"Product H", "8","Gray",234.123,"1",8,"ProductLine F","2006-04-22","2006-09-22"); 2> GO (1 rows affected) 1> insert into Product values(9,"Product I", "9","Red",543.123,"1",9,"ProductLine R","2007-05-22","2008-03-22"); 2> GO (1 rows affected) 1> insert into Product values(0,"Product J", "0","Gold",765.123,"1",0,"ProductLine J","2008-06-22","2009-03-22"); 2> GO (1 rows affected) 1> 2> 3> 4> CREATE PROCEDURE spProductCountBySubCategory 5> @SubID Int, 6> @ProdCount Int OUTPUT 7> AS 8> SELECT @ProdCount = COUNT(*) 9> FROM Product 10> WHERE ProductID = @SubID 11> GO 1> 2> DECLARE @Out Int 3> 4> EXECUTE spProductCountBySubCategory 5> @SubID = 2, 6> @ProdCount = @Out 7> 8> 9> SELECT @Out AS ProductCountBySubCategory 10> GO ProductCountBySubCategory


                    NULL

(1 rows affected) 1> 2> drop PROCEDURE spProductCountBySubCategory; 3> GO 1> 2> 3> drop table Product; 4> GO 1></source>


DECLARE @Out Int (get value out of a procedure)

   <source lang="sql">

6> CREATE TABLE Product( 7> ProductID int NOT NULL, 8> Name nvarchar(25) NOT NULL, 9> ProductNumber nvarchar(25) , 10> Color nvarchar(15) NULL, 11> StandardCost money NOT NULL, 12> Size nvarchar(5) NULL, 13> Weight decimal(8, 2) NULL, 14> ProductLine nchar(20) NULL, 15> SellStartDate datetime NOT NULL, 16> SellEndDate datetime NULL 17> ) 18> GO 1> insert into Product values(1,"Product A", "1","Red",123.123,"1",1,"ProductLine A","1999-03-22","2000-03-22"); 2> GO (1 rows affected) 1> 2> 3> insert into Product values(2,"Product B", "2","Yellow",234.234,"1",3,"ProductLine B","2000-03-22","2001-03-22"); 4> GO (1 rows affected) 1> 2> 3> insert into Product values(3,"Product C", "3","Pink",345.345,"1",3,"ProductLine V","2001-09-22","2006-02-22"); 4> GO (1 rows affected) 1> 2> 3> insert into Product values(4,"Product D", "4","White",456.456,"1",4,"ProductLine D","2002-08-22","2006-03-22"); 4> GO (1 rows affected) 1> 2> 3> insert into Product values(5,"Product E", "5","Black",567.567,"1",5,"ProductLine E","2003-01-22","2003-04-22"); 4> GO (1 rows affected) 1> 2> 3> insert into Product values(6,"Product F", "6","Blue",678.678,"1",6,"ProductLine W","2004-02-22","2005-05-22"); 4> GO (1 rows affected) 1> 2> 3> insert into Product values(7,"Product G", "7","Drak",789.789,"1",7,"ProductLine Q","2005-03-22","2006-03-22"); 4> GO (1 rows affected) 1> 2> 3> insert into Product values(8,"Product H", "8","Gray",234.123,"1",8,"ProductLine F","2006-04-22","2006-09-22"); 4> GO (1 rows affected) 1> 2> 3> insert into Product values(9,"Product I", "9","Red",543.123,"1",9,"ProductLine R","2007-05-22","2008-03-22"); 4> GO (1 rows affected) 1> 2> 3> insert into Product values(0,"Product J", "0","Gold",765.123,"1",0,"ProductLine J","2008-06-22","2009-03-22"); 4> GO (1 rows affected) 1> 2> 3> 4> 5> 6> CREATE PROCEDURE spProductCountBySubCategory 7> @SubID Int, 8> @ProdCount Int OUTPUT 9> AS 10> SELECT @ProdCount = COUNT(*) 11> FROM Product 12> WHERE ProductID = @SubID 13> GO 1> 2> DECLARE @Out Int 3> 4> EXECUTE spProductCountBySubCategory 5> @SubID = 2, 6> @ProdCount = @Out 7> 8> 9> SELECT @Out AS ProductCountBySubCategory 10> GO ProductCountBySubCategory


                    NULL

(1 rows affected) 1> 2> drop PROCEDURE spProductCountBySubCategory; 3> GO 1> 2> 3> drop table Product; 4> GO 1></source>


It is possible to define several variables in a single Declare statement.

   <source lang="sql">

4> 5> 6> Declare @LastName varchar(50), 7> @FirstName varchar(20), 8> @BirthDate smalldatetime 9> GO 1></source>


Simple SELECT query written using variables for field names.

   <source lang="sql">

3> 4> 5> CREATE TABLE authors( 6> au_id varchar(11), 7> au_lname varchar(40) NOT NULL, 8> au_fname varchar(20) NOT NULL, 9> phone char(12) NOT NULL DEFAULT ("UNKNOWN"), 10> address varchar(40) NULL, 11> city varchar(20) NULL, 12> state char(2) NULL, 13> zip char(5) NULL, 14> contract bit NOT NULL 15> ) 16> GO 1> insert authors values("1", "Joe", "Abra", "111 111-1111", "6 St.", "Berkeley", "CA", "11111", 1) 2> insert authors values("2", "Jack", "Majo", "222 222-2222", "3 St.", "Oakland" , "CA", "22222", 1) 3> insert authors values("3", "Pink", "Cherry", "333 333-3333", "5 Ln.", "Vancouver", "BC", "33333", 1) 4> insert authors values("4", "Blue", "Albert", "444 444-4444", "7 Av.", "Vancouver", "BC", "44444", 1) 5> insert authors values("5", "Red", "Anne", "555 555-5555", "6 Av.", "Regina", "SK", "55555", 1) 6> insert authors values("6", "Black", "Michel", "666 666-6666", "3 Pl.", "Regina", "SK", "66666", 1) 7> insert authors values("7", "White", "Sylvia", "777 777-7777", "1 Pl.", "Rockville", "MD", "77777", 1) 8> insert authors values("8", "Yellow","Heather","888 888-8888", "3 Pu", "Vacaville", "CA", "88888", 0) 9> insert authors values("9", "Gold", "Dep", "999 999-9999", "5 Av.", "Oakland", "CA", "99999", 0) 10> insert authors values("10", "Siler", "Dean", "000 000-0000", "4 Av.", "Oakland", "CA", "00000", 1) 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 @chvField1 VARCHAR(30), 4> @chvField2 VARCHAR(30), 5> @chvSQL VARCHAR(255) 6> SELECT @chvField1 = "au_fname" 7> SELECT @chvField2 = "au_lname" 8> SELECT @chvSQL = "SELECT " + @chvField1 + ", " + @chvField2 + " FROM authors" 9> EXEC (@chvSQL) 10> GO au_fname au_lname


----------------------------------------

Abra Joe Majo Jack Cherry Pink Albert Blue Anne Red Michel Black Sylvia White Heather Yellow Dep Gold Dean Siler (10 rows affected) 1> 2> drop table authors; 3> GO 1></source>


The DECLARE statement has a pretty simple syntax:

   <source lang="sql">

5> --DECLARE @<variable name> <variable type>[, 6> -- @<variable name> <variable type>[, 7> -- @<variable name> <variable type>]] 8> -- 9> --Setting Variables Using SET 10> 11> 12> CREATE TABLE OrderDetails ( 13> OrderID int NOT NULL , 14> ProductID int NOT NULL , 15> UnitPrice money NOT NULL DEFAULT (0), 16> Quantity smallint NOT NULL DEFAULT (1), 17> Discount real NOT NULL DEFAULT (0) 18> ) 19> 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> DECLARE @TotalCost money 3> 4> SET @TotalCost = 10 5> SET @TotalCost = @TotalCost * 1.1 6> 7> 8> DECLARE @Test money 9> 10> select @Test = MAX(UnitPrice) FROM OrderDetails 11> SELECT @Test 12> GO


             42.4000

(1 rows affected) 1> 2> drop table OrderDetails; 3> GO</source>


The names of variables must begin with @

   <source lang="sql">

5> 6> Declare @LastName varchar(50) 7> GO 1></source>