• 存储过程中拼接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”之间。

  • 相关阅读:
    【webpack系列】从零搭建 webpack4+react 脚手架(一)
    js常见的面试题
    java中读取资源文件的方法
    java servlet的域对象
    java 静态资源访问详解
    java servlet简述
    mysql免解压版的配置
    java网络编程
    java单例设计模式
    java多线程及线程安全详解
  • 原文地址:https://www.cnblogs.com/ztf20/p/6208210.html
Copyright © 2020-2023  润新知