Using Stored Procedure to create dynamic sql statement : Dynamic SQL « Transact SQL « SQL Server / T-SQL Tutorial






4>
5>
6> CREATE TABLE sales(
7>    stor_id        char(4)           NOT NULL,
8>    ord_num        varchar(20)       NOT NULL,
9>    ord_date       datetime          NOT NULL,
10>    qty            smallint          NOT NULL,
11>    payterms       varchar(12)       NOT NULL,
12>    title_id       varchar(80)
13> )
14> GO
1> insert sales values('1', 'QA7442.3', '09/13/94', 75, 'ON Billing','1')
2> insert sales values('2', 'D4482',    '09/14/94', 10, 'Net 60',    '1')
3> insert sales values('3', 'N914008',  '09/14/94', 20, 'Net 30',    '2')
4> insert sales values('4', 'N914014',  '09/14/94', 25, 'Net 30',    '3')
5> insert sales values('5', '423LL922', '09/14/94', 15, 'ON Billing','3')
6> insert sales values('6', '423LL930', '09/14/94', 10, 'ON Billing','2')
7> GO

(1 rows affected)

(1 rows affected)

(1 rows affected)

(1 rows affected)

(1 rows affected)

(1 rows affected)
1>
2>     CREATE PROCEDURE SalesQtys
3>         @chvOrderBy VARCHAR(30) = 'qty',
4>         @chvSortType VARCHAR(4) = 'ASC'
5>     AS
6>     DECLARE @chvSQL VARCHAR(255)
7>     SELECT @chvSQL = 'SELECT stor_id, ord_num, title_id, qty'
8>     SELECT @chvSQL = @chvSQL + ' FROM Sales'
9>     SELECT @chvSQL = @chvSQL + ' ORDER BY ' + @chvOrderBy + ' ' + @chvSortType
10>     EXEC (@chvSQL)
11>     GO
1>
2>     SalesQtys @chvOrderBy = 'stor_id', @chvSortType = 'DESC'
3>     GO
stor_id ord_num              title_id                                                                         qty
------- -------------------- -------------------------------------------------------------------------------- ------
6       423LL930             2                                                                                    10
5       423LL922             3                                                                                    15
4       N914014              3                                                                                    25
3       N914008              2                                                                                    20
2       D4482                1                                                                                    10
1       QA7442.3             1                                                                                    75

(6 rows affected)
1>     SalesQtys
2>     GO
stor_id ord_num              title_id                                                                         qty
------- -------------------- -------------------------------------------------------------------------------- ------
2       D4482                1                                                                                    10
6       423LL930             2                                                                                    10
5       423LL922             3                                                                                    15
3       N914008              2                                                                                    20
4       N914014              3                                                                                    25
1       QA7442.3             1                                                                                    75

(6 rows affected)
1>     SalesQtys @chvOrderBy = 'title_id'
2>     GO
stor_id ord_num              title_id                                                                         qty
------- -------------------- -------------------------------------------------------------------------------- ------
1       QA7442.3             1                                                                                    75
2       D4482                1                                                                                    10
3       N914008              2                                                                                    20
6       423LL930             2                                                                                    10
4       N914014              3                                                                                    25
5       423LL922             3                                                                                    15

(6 rows affected)
1>
2>
3> drop table sales;
4> GO








20.18.Dynamic SQL
20.18.1.A stored procedure with dynamic execution.
20.18.2.Simple SELECT query that uses a variable for the field to sequence the result set.
20.18.3.SELECT query with a variable for the table name so that condition determines which table the result set is based on.
20.18.4.Using Stored Procedure to create dynamic sql statement
20.18.5.Change database dynamically
20.18.6.Pass parameters into dynamic sql statement
20.18.7.Build a dynamic sql statement from schema name, table name and column name
20.18.8.create a dynamic sql statement and save it in a varchar type variable