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注册。

  • 相关阅读:
    mysql复制那点事
    全排列问题
    56. Merge Interval
    2. Add Two Numbers
    20. Valid Parentheses
    121. Best Time to Buy and Sell Stock
    120. Triangle
    96. Unique Binary Search Trees
    91. Decode Ways
    72. Edit Distance
  • 原文地址:https://www.cnblogs.com/zjypp/p/2319414.html
Copyright © 2011-2022 走看看