• SQL Server 2012


    动态SQL的两种执行方式:EXEC @sql 和 EXEC sys.sp_executesql @sql

    DECLARE @c_ids VARCHAR(200)
    SET @c_ids ='1,2'
    
    --直接这样是无法执行的
    --SELECT * FROM dbo.Student WHERE Class IN (@c_ids)
    
    --1, Exec 执行SQL动态查询
    Exec  ('SELECT * FROM dbo.Student WHERE Class IN ('+@c_ids+')')
    
    -- 2,通过动态查询,过滤需要的列
    DECLARE @rols VARCHAR(200)
    SET @rols='StuName,StuAge,Class'
    Exec  ('SELECT '+@rols+' FROM dbo.Student WHERE Class IN ('+@c_ids+')')
    
    --3,执行SQL动态查询的另外一种方法,通过内置存储过程:sys.sp_executesql 执行SQL语句
    DECLARE @sql NVARCHAR(200)
    SET @sql='SELECT '+@rols+' FROM dbo.Student WHERE Class IN ('+@c_ids+')'
    EXEC sys.sp_executesql @sql
    
    --4, 存储过程动态执行SQL,以参数变量@agePara的形式给SQL语句传递变量
    DECLARE @age INT
    SET @age = 18
    SET @sql='SELECT * FROM dbo.Student WHERE StuAge = @agePara '
    EXEC sys.sp_executesql @sql,N'@agePara  int',@age 
     
    --5, '' 两个' 转移成一个',选择出名字中包含有‘英’字的学生信息
    DECLARE @txt NVARCHAR(10)
    SET @txt = '英'
    SET @sql='SELECT *  FROM dbo.Student WHERE StuName like ''%@namePara'' '
    EXEC sys.sp_executesql @sql,N'@namePara   NVARCHAR(10)',@txt 
    
    --6, 把需要输出的变量同样可以定义到变量中进行输出
    DECLARE @rowCountResult INT
    SET @sql='SELECT @rowCountResult=count(*) FROM dbo.Student WHERE StuAge = @agePara '
    EXEC sys.sp_executesql @sql,N'@agePara  int,@rowCountResult int OutPut',@age ,@rowCountResult OUTPUT
    SELECT @rowCountResult
    
    
    --7,技巧:用Print 查看拼接的动态SQL是否正确
    SELECT 'SELECT '+@rols+' FROM dbo.Student WHERE StuAge = @agePara '
    

      

  • 相关阅读:
    使用C语言来扩展PHP,写PHP扩展dll
    用C语言写PHP扩展 linux
    mysql 建索引删除索引命令
    xhprof安装&&使用
    Burst Windows 2003 VPS安装中文语言包图文教程
    yii框架的缓存
    rsync的配置与应用
    mysql分组排序取前N条记录的最简洁的单条sql !
    linux下php以fastcgi模式运行
    JS收集<2>:图片上传_限制格式、类型、尺寸
  • 原文地址:https://www.cnblogs.com/i-shanghai/p/6351476.html
Copyright © 2020-2023  润新知