存储过程中拼接SQL语句

本文介绍了一种在SQL存储过程中动态拼接SQL语句的方法,并通过实例展示了如何使用参数来构建查询条件。

很多时候我们需要利用参数在存储过程中重新组织SQL语句,在存储过程中拼接的SQL语句只是一个字符串,不会被直接执行,所以加一个execute执行它就可以了。具体看如下演示代码:

 

代码:

 

[sql]  view plain  copy
 
 print?
  1. set ANSI_NULLS ON  
  2. set QUOTED_IDENTIFIER ON  
  3. go  
  4. -- =============================================  
  5. -- Author:      yy  
  6. -- Create date: 2012-1-17  
  7. -- Description: 存储过程SQL字符串拼接示例  
  8. -- =============================================  
  9. CREATE PROCEDURE [dbo].[Test]  
  10.     @FileName varchar(10), --字段名  
  11.     @Operator varchar(1), --操作符  
  12.     @FileValue  varchar(10) --字段值  
  13. AS   
  14.     DECLARE @TempSql varchar(100) --临时存放sql语句  
  15. BEGIN  
  16.     set @TempSql= 'select * from Comment where ' + @FileName + @Operator + char(39) + @FileValue + char(39) --拼接sql字符串,char(39)为单引号  
  17.     execute(@TempSql) --执行sql字符串  
  18. END  

测试:

 

 

[sql]  view plain  copy
 
 print?
  1. execute Test 'newsid','>',4  

 

     在这解释一下“ALTERPROCEDURE [dbo].[Test]”至“AS”之间的代码和“AS”至“BEGIN”之间的代码有什么区别,像我这种SQL新手应该会有疑问:为什么@TempSql要定义在“AS”至“BEGIN”之间?因为,“AS”至“BEGIN”之间定义的为临时变量,前边必须加DECLARE,和其他语言中普通变量的使用方法相同;而“ALTER PROCEDURE [dbo].[Test]”至“AS”之间定义的是存储过程被调用时传入的必要参数,必须在调用的时候就赋值,不可以加DECLARE,可以理解为字符常量,一旦调用时被赋值,就再无法改变,就上边例子来说,类似@FileName=’xxx’的写法是错误的。因为@TempSql只是用来接受SQL语句的临时变量,没有初值,但必须接受值,所以要定义在“AS”至“BEGIN”之间。

 

转载于:https://www.cnblogs.com/ztf20/p/6208210.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值