• *****动态执行sql


    來源:

    http://www.cnblogs.com/MythYsJh/archive/2009/10/27/1590615.html

    现实中会遇到需要拼接sql,并动态执行sql的情形:
    DECLARE @StrSql NVARCHAR(MAX)
    SET @StrSql = 'SELECT 1'
    EXEC(@StrSql)--通过EXEC来执行动态拼接的sql,括号是必须的,否则后面的内容会被当做存储过程

         在动态拼接的sql里面完全可以像写一般的sql一样,但是有个问题是在动态sql里声明的变量只在动态sql里有效,在外面是不能访问的:

    DECLARE @StrSql NVARCHAR(MAX)
    SET @StrSql = 'DECLARE @COUNT INT'
    SET @StrSql = @StrSql + ' SET @Count = 1
                              SELECT @Count
    '
                              
    EXEC(@StrSql)

    这个语句会返回1,但是如果这样写:

    DECLARE @StrSql NVARCHAR(MAX)
    SET @StrSql = 'DECLARE @COUNT INT'
    SET @StrSql = @StrSql + ' SET @Count = 1
                              
    '
                              
    EXEC(@StrSql)
    SELECT @Count

    就会出错了:Msg 137, Level 15, State 2, Line 7
                     必须声明标量变量 "@Count"。

     问题就来了,如果需要获取动态sql中的某些值怎么办?例如做了一个存储过程,动态拼的sql并且需要返回查询记录的总数,怎么办?

    这时需要用到一个系统存储过程:sq_executesql

    DECLARE @StrSql NVARCHAR(MAX)
    DECLARE @Total INT
    SET @StrSql = ' SET @TotalCount = 1'
                              
    EXEC sp_executesql @StrSql,N'@TotalCount INT OUTPUT'@Total OUTPUT
    SELECT @Total  --1

    OK.

  • 相关阅读:
    实验一 总结
    C#中将JObject类型数据转换成这样的货币数字-带千分符-四舍五入2位小数
    Git常用命令+报错solution
    Python Requests学习笔记
    Python requests 环境搭建
    关于Page Object个人结合测试框架的一些理解
    REST理解 + API测试学习笔记
    记录组内做API测试的流程
    理解c#的Get Set访问器及测试脚本中的应用
    tp3
  • 原文地址:https://www.cnblogs.com/luoyaoquan/p/2102875.html
Copyright © 2020-2023  润新知