zoukankan      html  css  js  c++  java
  • 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注册。

  • 相关阅读:
    穿越之我是码农 1024 篇
    误删文件机房停电黑客入侵_你最怕什么?
    AI觉醒进行时:程序员你怕了吗?
    未来已来!阿里小蜜AI技术揭秘
    千人千面智能淘宝店铺背后的算法研究登陆人工智能顶级会议AAAI 2017
    CDN缓存不命中排查
    现实需求巨大_技术尚未成熟_学界与业界思维大碰撞
    围观阿里云最会赚钱的人!价值2万元邀请码不限量发送
    今晚19:30直播阿里巴巴大规模持续集成的技术演进之路_欢迎免费观看
    工作压力山大?码农这么减压最有效
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319414.html
Copyright © 2011-2022 走看看