zoukankan      html  css  js  c++  java
  • 存储过程中拼接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”之间。

  • 相关阅读:
    Advanced Configuration Tricks
    Reviewing the Blog Module
    Editing and Deleting Data
    Making Use of Forms and Fieldsets
    Understanding the Router
    SQL Abstraction and Object Hydration
    Preparing for Different Databases
    Java学习理解路线图
    Openstack学习历程_1_视频
    CentOS安装Nginx负载
  • 原文地址:https://www.cnblogs.com/ztf20/p/6208210.html
Copyright © 2011-2022 走看看