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

      

  • 相关阅读:
    Linxu 挂载光盘和硬盘
    Linux firewall
    指纹获取 Fingerprint2
    Vue 封装的组件生命周期钩子
    vue富文本编辑,编辑自动预览,单个图片上传不能预览的问题解决:
    vue 集成百度富文本编辑器
    axios 的二次封装
    element 列表中已选的标记
    element 表单的input循环生成,并可单个input失去焦点单个验证并保存; (多个表单实例)
    axios 二进制流导出
  • 原文地址:https://www.cnblogs.com/i-shanghai/p/6351476.html
Copyright © 2011-2022 走看看