• sp_executesql和存储过程中组合SQL语句


    存储过程有时候要实现比复杂的方法,其中有的手段就是要组合sql语句

    declare @TestSql nvarchar(1000)

    set @TestSql = 'select * from tablename'

    就像这种方式一样,当然上面的只是一个事例

    组合sql要先区分几种错误的概念

    1,对于表名,列名,字段名都是不能使用变量的。

    比如这个方式

    declare @tableName varchar(100)

    declare @Sql varchar(1000)

    set @tableName ='userinfo'

    set @Sql = 'select * from @tableName'

    执行这种方式是会报错的。字段也是其中道理

    组合sql,最后使用exec(@Sql)可以执行,这是一种比较简单实现方式,就是一个参数,组合的sql语句。

    另外一种是比较复杂的方式就是sp_executesql,这个方式也是执行组合sql,但是功能 更多,更强大。因为他是可以嵌入参数的

    sp_executesql [ @stmt = ] stmt
    [
        {, [@params=] N'@parameter_name data_type [ [ OUT [ PUT ][,...n]' }
         {, [ @param1 = ] 'value1' [ ,...n ] }
    ]

    这是语法格式。第一个参数就是组合的sql语句,后面的就是参数。

    一个例子
    DECLARE @SQLString nvarchar(500);

    SET @SQLString = N'SELECT * FROM AdventureWorks.HumanResources.Employee   WHERE ManagerID = @ManagerID';
    EXECUTE sp_executesql @SQLString,  N'@ManagerID tinyint', @ManagerID = 200

    需要注意的是组合sql必须是nvarchar,ntext类型,字符串前面可以加N字母。

    后面参数的具体格式。就是组合sql,第二就是sql中出现的@变量。声明他的类型,第3个参数就是对参数赋值

    2,一个复杂例子,多个参数和参数输出类型

    现在组合sql中多个参数,而且要求有输出参数,就是那个数量。我也是在编程中发现这个问题,才研究sp_executesql的

    declare @Sql nvarchar(500)

    declare @Count int

    set @Sql = 'select @num = count(*) from tableName where uid = @UID'
    EXECUTE sp_executesql @Sql,'@num int output,@UID int',@Count output,@UID =3

    print @Count

    这样就ok了

    需要注意的是。第二个输入参数中的sql中参数,必须按先后顺序进行声明。否则就有错误,我测试中是这样的。

    本文使用Blog_Backup未注册版本导出,请到soft.pt42.com注册。

  • 相关阅读:
    ViewPagerAdapter
    Android Touch事件传递机制详解
    android ANR产生原因和解决办法【转】
    Android 操作系统的内存回收机制(转载)
    android的程序运行数据存放在哪里?
    自定义RecyclerView.ItemDecoration,实现RecyclerView的分割线效果
    Android中 Bitmap和Drawable相互转换的方法
    android 存储图片到data目录和读取data目录下的图片
    多线程调用HttpWebRequest并发连接限制
    反射
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319414.html
Copyright © 2020-2023  润新知