动态SQL

Sample1:

/* Variable Declaration */
DECLARE @EmpID AS SMALLINT
DECLARE @SQLQuery AS NVARCHAR(500)

/* Build and Execute a Transact-SQL String with a single parameter value Using EXECUTE Command */
SET @EmpID = 1001
SET @SQLQuery = 'SELECT * FROM tblEmployees WHERE EmployeeID = ' + CAST(@EmpID AS NVARCHAR(10))
Print @SQLQuery
EXECUTE(@SQLQuery)

 

Sample2:

* Using sp_executesql - Example 1.1 */

/* Variable Declaration */
DECLARE @EmpID AS SMALLINT
DECLARE @SQLQuery AS NVARCHAR(500)
DECLARE @ParameterDefinition AS NVARCHAR(100)

/* Build and Execute a Transact-SQL String with a single parameter value Using sp_executesql Command */
SET @EmpID = 1001
SET @SQLQuery = 'SELECT * FROM tblEmployees WHERE EmployeeID = @EmpID'

/* Specify Parameter Format */
SET @ParameterDefinition =  '@EmpID SMALLINT'

EXECUTE sp_executesql @SQLQuery, @ParameterDefinition, @EmpID

 

 

Sample3:

ALTER Procedure sp_EmployeeSelect
 @EmployeeName NVarchar(100),
 @Department NVarchar(50),
 @Designation NVarchar(50),
 @StartDate DateTime,
 @EndDate DateTime,
 @Salary Decimal(10,2),
 @Total INT OUTPUT
 
    
AS
 
 Set NoCount ON
 
 Declare @SQLQuery AS NVarchar(4000)
 Declare @ParamDefinition AS NVarchar(2000)
 
 Set @SQLQuery = 'Select * From tblEmployees where (1=1) '
 
 If @EmployeeName Is Not Null
      Set @SQLQuery = @SQLQuery + ' And (EmployeeName = @EmployeeName)'

 If @Department Is Not Null
      Set @SQLQuery = @SQLQuery + ' And (Department = @Department)'
 
 If @Designation Is Not Null
      Set @SQLQuery = @SQLQuery + ' And (Designation = @Designation)'
 
 If (@StartDate Is Not Null) AND (@EndDate Is Not Null)
      Set @SQLQuery = @SQLQuery + ' And (JoiningDate BETWEEN @StartDate AND @EndDate)'

 If @Salary Is Not Null
      Set @SQLQuery = @SQLQuery + ' And (Salary >= @Salary)'
 
 Set @ParamDefinition = '@EmployeeName NVarchar(100),
    @Department NVarchar(50),
    @Designation NVarchar(50),
    @StartDate DateTime,
    @EndDate DateTime,
    @Salary Decimal(10,2)'


 SELECT @Total=COUNT(*) FROM dbo.tblEmployees
 Exec sp_Executesql  @SQLQuery,
    @ParamDefinition,
    @EmployeeName,
    @Department,
    @Designation,
    @StartDate,
    @EndDate,
    @Salary
    
 If @@ERROR <> 0 GoTo ErrorHandler
 Set NoCount OFF
 Return(0)
 
ErrorHandler:
 Return(@@ERROR)
GO

 

DECLARE @i int
EXEC sp_EmployeeSelect 'John Smith', NULL, NULL, NULL, NULL, NULL,@i OUTPUT
SELECT @i

 

 

http://www.sqlteam.com/article/introduction-to-dynamic-sql-part-1
http://www.sqlteam.com/article/introduction-to-dynamic-sql-part-2

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值