通过后台语言编程的方式可以生成任意sql语句了,动态SQL到底还有什么用呢?

如果你仅仅只想在存储过程中能够让任意拼接的字符串(sql语句)能够执行的话,就必须用到动态sql了。当然,只要你愿意,这些逻辑完全可以使用编程语言来实现。

动态SQL使用较少,常用于存储过程中,给sql逻辑提供更大的灵活度。本人曾将此用于薪资模块,在存储过程中根据创建的薪资套动态地生成薪资表。

关于动态SQL的执行方式有两种,请看示例如下:

-- ============== 动态SQL ==================
--  1、exec 或execute不支持输出参数
exec('select * from sms_biz_UserInfo where Name = ''' + 'admin'  + '''')-- 2、exec sp_executesql可以带输入参数和输出参数
-- 注意:SQL语句前必须带N
exec sp_executesql N'select * from sms_biz_UserInfo where Name = ''admin'''    -- 请注意字符串前一定要加N-- (1)输入参数declare @name nvarchar(50) = 'admin'exec sp_executesql N'select * from sms_biz_UserInfo where Name = @name',N'@name nvarchar(50)',@name-- (2)输出参数declare @count intexec sp_executesql N'select @count = count(*) from sms_biz_UserInfo',N'@count int output',@count outputprint @count-- (3)输入、输出参数/*  注意:(1) 第一个参数是动态SQL(2) 第二个参数是动态SQL的“所有”(而不是单个)变量声明,(3) 第三个参数开始,必须按照第二个参数列表中声明顺序指定参数。(4) 输出参数,必须指定“output”,在第二个参数中声明,还是在第三个参数之后指定,都需要指定“output”字样!(5) 注意:动态sql中不支持表变量,但可以直接使用临时表(临时表名以#开关)*/declare @count intdeclare @name nvarchar(50) = 'admin'exec sp_executesql N'select @count = count(*) from sms_biz_UserInfo where Name = @name',N'@count int output, @name nvarchar(50)',@count output,@nameprint @count-- (4)动态SQL与临时表:创建临时表在动态SQL中可使用(只要在同一Session中);
-- 但动态SQL中创建的临时表,不可在动态SQL外面使用
-- 正常select * into #t from ams_biz_AirTicketInfoexec('select * from #t')
-- 错误exec('select * into #t from ams_biz_AirTicketInfo')select * from #t

SQL总结之动态SQL(MSSQL)相关推荐

  1. MyBatis 一个动态sql的问题(动态SQL基于OGNL表达式)<if test=“state == ‘0‘“>单个的字符要使用双引号,改为<if test=‘state == “1“‘>或

    MyBatis 一个动态sql的问题(动态SQL基于OGNL表达式) <if test="state == '0'"> 单个的字符要使用双引号,改为<if tes ...

  2. 哈工大数据库系统(上):嵌入式SQL语言之动态SQL(十)课后测验与作业

    文章目录 前引 第十章课后习题 前引 关于这部分 我的JDBC基本上没怎么听 都跳过了 - - 因为真的记不住 不是叫记不住吧 是因为我现在连基本的连接 数据库操作都没有怎么练 就开始到嵌入式的语言 ...

  3. Mybatis中XML的文件SQL语句与动态sql标签(trim|where|set|foreach|if|choose|when|otherwise|bind)

    在xml中写sql语句有很多的规范.标准,有时候想要找对应的例子还得翻一翻以前的代码,这里干脆对遇到的情况做个记录. 一,新建XML文件 <?xml version="1.0" ...

  4. oracle怎么优化动态sql语句,oracle动态sql语句处理

    动态SQL语句处理:根据要处理的sql语句的作用不同,可以使用三种不同类型的动态sql方法:使用execute immediate语句可以处理包括ddl(create.alter和drop).DCL( ...

  5. Mysql动态sql之mybatis动态sql

    mysql动态sql想必大家都了解了 举个列子:现在有如下sql语句 select id,name from animals where id = 1 and name ="老虎" ...

  6. java回顾:MyBatis参数、sql片段、动态sql、高级查询

    目录 一.MyBatis参数 SqlSessiong工具类 1.映射文件配置-入参 1.1 parameterType入参 1.2 单个入参,变量名任意定义: 1.3 多个入参,解决方案: 1.4 p ...

  7. sql语句和动态sql语句

    mybatis常用静态sql和动态sql 文章目录 mybatis常用静态sql和动态sql 静态sql 1.select 标签 2.insert, update 和 delete 3.sql标签 动 ...

  8. 嵌入式sql语句oracle,第十讲 嵌入式SQL语言之动态SQL

    动态SQL的概念 静态SQL特点:SQL语句在程序中已经按要求写好,只需要把一些参数通过变量(高级语言程序语句中不带冒号) 传送给嵌入式SQL语句即可(嵌入式SQL语句中带冒号) 例如: SpecNa ...

  9. SQL中的动态SQL

    在介绍动态SQL前我们先看看什么是静态SQL 静态SQL 静态 SQL 语句一般用于嵌入式 SQL 应用中,在程序运行前,SQL 语句必须是确定的,例如 SQL 语句中涉及的列名和表名必须是存在的.静 ...

最新文章

  1. GP通过外部表装载数据时遇到ERROR:extra data after last expected column解决方法
  2. hdu 3064
  3. 远程连接linux(Ubuntu配置SSH服务)22端口
  4. linux里c库和gnu c库,Linux下的C的库文件和头文件有什么区别-
  5. oracle 枚举_枚举导出为sql语句java实现
  6. UBUNTU 12.04 下配置 HAXM 加速 ANDROID模拟器
  7. pat天梯赛练习 L2-006
  8. 东八区转为0时区_初中会考重要知识点:地理时区计算技巧全掌握
  9. Mysql查漏补缺笔记
  10. mysql无法安装弹出Log_[MySQL FAQ]系列 -- 启用GTID binlog新安装完的MySQL提示无法登录...
  11. PHP+nginx安装配置注意事项
  12. 互斥对象与关键代码段的比较
  13. 洛谷 P3396 哈希冲突 解题报告
  14. java面试题 垃圾回收机制 GC BAT面试题系列 基础篇(十四)
  15. c语言学习资料 集锦
  16. sql server安装-没有权限访问文件
  17. java 图像锐化_Java中图像锐化操作的方法详解
  18. 亚马逊运营教程,三招学会亚马逊
  19. 结巴分词标注兼容_ICTCLAS2008汉语词性标注集
  20. 粒子系统-烟花效果的实现

热门文章

  1. vue3 (五) 规范一:定义界面模版
  2. IE增强安全功能不兼容的控件的解决方案
  3. 浅谈Android MVI架构---大自然的搬运工~~~
  4. mysql latin1 中文_mysql 的 latin1 支持中文
  5. mysql oltp_OLTP应用之MySQL架构选型
  6. 【饭谈】为何要加入技术交流群?
  7. 应用安全系列之三十四:数值溢出
  8. C语言程序设计报告2000字,C语言程序设计报告.doc
  9. TomTom第1季纯利降83%,PNDs竞争激烈
  10. java抓包asp_菜刀ASP 下载文件抓包