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 '
    

      

  • 相关阅读:
    python 面向对象类成员(字段 方法 属性)
    python 面向对象三大特性(封装 多态 继承)
    python 正则
    python 反射机制 ( 广泛应用于URL参数)
    python 导入模块
    python 字符串格式化 ( 百分号 & format )
    python time
    python filter
    【工作感悟】——揭开“PM”的面纱
    【SSH】——spring的控制反转和依赖注入
  • 原文地址:https://www.cnblogs.com/i-shanghai/p/6351476.html
Copyright © 2011-2022 走看看