网易首页 > 网易号 > 正文 申请入驻

SQL中的动态SQL

0
分享至

在介绍动态SQL前我们先看看什么是静态SQL

静态SQL

静态 SQL 语句一般用于嵌入式 SQL 应用中,在程序运行前,SQL 语句必须是确定的,例如 SQL 语句中涉及的列名和表名必须是存在的。静态 SQL 语句的编译是在应用程序运行前进行的,编译的结果会存储在数据库内部。而后程序运行时,数据库将直接执行编译好的 SQL 语句,降低运行时的开销。

动态SQL

动态 SQL 语句是在应用程序运行时被编译和执行的,例如,使用 DB2 的交互式工具 CLP 访问数据库时,用户输入的 SQL 语句是不确定的,因此 SQL 语句只能被动态地编译。动态 SQL 的应用较多,常见的 CLI 和 JDBC 应用程序都使用动态 SQL。

动态SQL作用

  • 自动化管理任务。例如:对于数据库实例中的每个数据库,查询其元数据,为其执行BACKUP DATABASE语句。

  • 改善特定任务的性能。例如,构造参数化的特定查询,以重用以前缓存过的执行计划。

  • 对实际数据进行查询的基础上,构造代码元素。例如,当事先不知道在PIVOT运算符的IN子句中应该出现哪些元素时,动态构造PIVOT查询。

动态SQL执行方法

使用EXEC(EXECUTE的缩写)命令和使用SP_EXECUTERSQL。

EXEC命令执行

语法

EXECUTE (SQL语句)

注:EXECUTE 命令有两个用途,一个是用来执行存储过程,另一个是执行动态SQL

不带参数示例

在变量@SQL中保存了一个字符串,该字符串中包含一条查询语句,再用EXEC调用保存在变量中的批处理代码,我们可以这样写SQL:

EXEC ('SELECT * FROM Customers')

结果如下:

与我们直接执行SELECT * FROM Customers一样。

带参数示例

还是上面的示例,我们换一种写法

DECLARE @SQL AS VARCHAR(100);
DECLARE @Column AS VARCHAR(20);
SET @Column = '姓名'
SET @SQL = 'SELECT ' + @Column + ' FROM Customers';
EXEC (@SQL)

结果如下:

SP_EXECUTERSQL执行

语法

EXEC SP_EXECUTERSQL 参数1,参数2,参数3

注意:SP_EXECUTERSQL是继EXEC后另一种执行动态SQL的方法。使用这个存储过程更加安全和灵活,因为它支持输入和输出参数。注意的是,与EXEC不同的是,SP_EXECUTERSQL只支持使用Unicode字符串作为其输入的批处理代码。

示例

构造了一个对Customers表进行查询的批处理代码,在其查询过滤条件中使用一个输入参数@CusID

DECLARE @SQL AS NVARCHAR(100);
SET @SQL=N'SELECT * FROM Customers
WHERE 客户ID=@CusID;';
EXEC SP_EXECUTESQL
@STMT=@SQL,
@PARMS=N'@CusID AS INT',
@CusID=1;

结果如下:

代码中将输入参数取值指定为1,但即使采用不同的值在运行这段代码,代码字符串仍然保存相同。这样就可以增加重用以前缓存过的执行计划的机会。

总结

动态SQL在日常工作中可能接触的比较少,但是其功能是非常强大的,可以直接嵌套在代码里进行操作数据,但是也很容易出错,特别是在进行命令拼接时候要非常仔细。这里只是给大家简单介绍一下其使用方法,需要深入使用还需要多多研究。

转自公众号:SQL数据库开发

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
美国第五舰队军事基地服务中心遭导弹袭击

美国第五舰队军事基地服务中心遭导弹袭击

每日经济新闻
2026-02-28 17:55:55
郭士强终于变阵!对阵台北首发提前曝光

郭士强终于变阵!对阵台北首发提前曝光

宝哥精彩赛事
2026-02-28 20:33:13
人能无耻到什么地步?看完真得气到牙根儿疼

人能无耻到什么地步?看完真得气到牙根儿疼

另子维爱读史
2026-01-31 20:14:52
世界首次五百强30 年反转,日本149家,美国151家,中国3家

世界首次五百强30 年反转,日本149家,美国151家,中国3家

爱吃醋的猫咪
2026-02-27 17:51:23
一家三口看《飞驰人生》, 老婆约小三坐旁边偷情, 被老公炸裂抓奸

一家三口看《飞驰人生》, 老婆约小三坐旁边偷情, 被老公炸裂抓奸

扮猫骑老虎
2026-02-26 17:21:01
访华时间定了,白宫送大礼,特朗普诚意满满,怕中方叫停八件大事

访华时间定了,白宫送大礼,特朗普诚意满满,怕中方叫停八件大事

兵说
2026-02-27 22:27:23
美国以色列偷袭伊朗,意图斩首哈梅内伊!

美国以色列偷袭伊朗,意图斩首哈梅内伊!

胜研集
2026-02-28 15:36:36
医生提醒:吃一根香菜,就等于喝了一杯降糖茶,真的假的?

医生提醒:吃一根香菜,就等于喝了一杯降糖茶,真的假的?

王二哥老搞笑
2026-02-24 19:52:52
伊朗与6国外长通话

伊朗与6国外长通话

界面新闻
2026-02-28 19:30:09
重庆高速公路集团,穆军任上被查,曾任两江新区最大国企董事长

重庆高速公路集团,穆军任上被查,曾任两江新区最大国企董事长

新浪财经
2026-02-28 20:20:04
伊朗用血泪换来的教训:一旦中美开战,中国必须首先锁定这一点

伊朗用血泪换来的教训:一旦中美开战,中国必须首先锁定这一点

冷峻视角下的世界
2026-02-20 07:45:35
“大学生连切鸡都不会”,家长晒烤鸡半身照,直言:无法正常交流

“大学生连切鸡都不会”,家长晒烤鸡半身照,直言:无法正常交流

妍妍教育日记
2026-02-28 18:27:54
白宫:特朗普愿不设任何前提条件与金正恩对话

白宫:特朗普愿不设任何前提条件与金正恩对话

看看新闻Knews
2026-02-27 18:26:53
32万彩礼不让碰后续:彩礼已花完,女方全村社死,自曝另有隐情

32万彩礼不让碰后续:彩礼已花完,女方全村社死,自曝另有隐情

离离言几许
2026-02-28 18:06:09
独生子女家庭一定要立遗嘱,而且遗嘱里一定要“加上这3句话”

独生子女家庭一定要立遗嘱,而且遗嘱里一定要“加上这3句话”

娱乐圈见解说
2026-02-26 19:40:20
直线跳水!中东,突发!以色列对伊朗发动打击

直线跳水!中东,突发!以色列对伊朗发动打击

证券时报e公司
2026-02-28 14:50:56
北京每天5700吨粪便,根本没运出五环,它们去了哪?

北京每天5700吨粪便,根本没运出五环,它们去了哪?

南权先生
2026-02-28 15:37:14
1秒3亿、单日突破10亿!老铺黄金创下天猫大促最快销售纪录

1秒3亿、单日突破10亿!老铺黄金创下天猫大促最快销售纪录

财闻
2026-02-27 15:05:28
日本主帅:中国男篮有两名球员对日本队威胁大,其中一个人最难防

日本主帅:中国男篮有两名球员对日本队威胁大,其中一个人最难防

现代小青青慕慕
2026-02-28 15:23:31
伊朗吃肉的时候,对中国防得严严实实,生怕中国占一点便宜

伊朗吃肉的时候,对中国防得严严实实,生怕中国占一点便宜

百态人间
2026-02-24 15:37:37
2026-02-28 22:55:00
中国尊下的打工仔
中国尊下的打工仔
不定时更新Java知识
26文章数 168关注度
往期回顾 全部

科技要闻

狂揽1100亿美元!OpenAI再创融资神话

头条要闻

美以袭击伊朗 华人紧急逃离德黑兰:没想到来得这么快

头条要闻

美以袭击伊朗 华人紧急逃离德黑兰:没想到来得这么快

体育要闻

球队主力全报销?顶风摆烂演都不演了

娱乐要闻

周杰伦儿子正面照曝光,与父亲好像

财经要闻

冲突爆发 市场变天?

汽车要闻

岚图泰山黑武士版3月上市 搭载华为四激光智驾方案

态度原创

艺术
房产
手机
公开课
军事航空

艺术要闻

就是这个画风,美的我有点儿接受不了!

房产要闻

滨江九小也来了!集齐海侨北+哈罗、寰岛...江东教育要炸了!

手机要闻

vivo X500 Ultra突然曝光:首发三星HPA镜头,2027年超大杯独享!

公开课

李玫瑾:为什么性格比能力更重要?

军事要闻

美国以色列联合袭击伊朗 实时战况

无障碍浏览 进入关怀版