要想知道字符是否为MS SQL Server保留字,那我们必须把SQL所有保留字放在一个数据集中。然后我们才能判断所查找的字符是否被包含在数据集中。

MS SQL Server保留字:

DECLARE @ReservedWords VARCHAR(2000) = 'add,all,alter,and,any,as,asc,authorization,avg,backup,begin,between,break,browse,bulk,by,cascade,case,check,checkpoint,close,clustered,coalesce,column,commit,committed,compute,confirm,constraint,contains,containstable,continue,controlrow,convert,count,create,cross,current,current_date,current_time,current_timestamp,current_user,cursor,database,dbcc,deallocate,declare,default,delete,deny,desc,disk,distinct,distributed,double,drop,dummy,dump,else,end,errlvl,errorexit,escape,except,exec,execute,exists,exit,fetch,file,fillfactor,floppy,for,foreign,freetext,freetexttable,from,full,goto,grant,group,having,holdlock,identity,identity_insert,identitycol,if,in,index,inner,insert,intersect,into,is,isolation,join,key,kill,left,level,like,lineno,load,max,min,mirrorexit,national,nocheck,nonclustered,not,null,nullif,of,off,offsets,on,once,only,open,opendatasource,openquery,openrowset,option,or,order,outer,over,percent,percision,perm,permanent,pipe,plan,prepare,primary,print,privileges,proc,procedure,processexit,public,raiserror,read,readtext,reconfigure,references,repeatable,replication,restore,restrict,return,revoke,right,rollback,rowcount,rowguidcol,rule,save,schema,select,serializable,session_user,set,setuser,shutdown,some,statistics,sum,system_user,table,tape,temp,temporary,textsize,then,to,top,tran,transaction,trigger,truncate,tsequal,uncommitted,union,unique,update,updatetext,use,user,values,varying,view,waitfor,when,where,while,with,work,writetext,'

此时,我们可以把这字符串拆分插入一张表中:

CREATE TABLE [dbo].[ReservedWordOfSql]
(
[KeyWork] NVARCHAR(40)
)
GO

Source Code

WHILE CHARINDEX(',',@ReservedWords) <>0
BEGIN
DECLARE @v NVARCHAR(40) = LTRIM(RTRIM(SUBSTRING(@ReservedWords,1,CHARINDEX(',',@ReservedWords) - 1)))
INSERT INTO [dbo].[ReservedWordOfSql] ([KeyWork]) VALUES (@v)
SET @ReservedWords = STUFF(@ReservedWords,1,CHARINDEX(',',@ReservedWords),N'')
END
GO

Source Code

举例说明:

其实,我们可以写成一个自定义函数:

CREATE FUNCTION [dbo].[svf_IsReservedWord]
(
@searchword NVARCHAR(40)
)
RETURNS BIT
AS
BEGIN
DECLARE @exists BIT = 1
IF NOT EXISTS(SELECT TOP 1 1 FROM [dbo].[ReservedWordOfSql] WHERE [KeyWork] = @searchword)
SET @exists = 0
RETURN @exists
END GO

Source Code

执行函数,将得到相同的结果:

字符是否为SQL的保留字的更多相关文章

  1. pl/sql developer 快捷操作: 显示不可见字符 显示历史sql语句 拷贝整个sql窗口的语句至新的sql窗口

    pl/sql developer 快捷操作: 显示不可见字符 显示历史sql语句 拷贝整个sql窗口的语句至新的sql窗口 显示不可见字符:可以把空格.回车显示出来: 显示历史sql语句:ctrl+e ...

  2. 浅析白盒审计中的字符编码及SQL注入

    尽管现在呼吁所有的程序都使用unicode编码,所有的网站都使用utf-8编码,来一个统一的国际规范.但仍然有很多,包括国内及国外(特别是非英语国家)的一些cms,仍然使用着自己国家的一套编码,比如g ...

  3. 字符约束条件的SQL注入攻击

    引言 目前值得高兴的是,开发者在建立网站时,已经开始关注安全问题了——几乎每个开发者都知道SQL注入漏洞了.在本文中,我将为读者介绍另一种与SQL数据库相关的漏洞,虽然它的危害性与SQL注入不相上下, ...

  4. 一段四表联查外加字符拼接的sql,留存备查

    select DISTINCT [P_ID],[P_CODE],[P_CODE_OLD],[P_NAME],[NATIVE_PLACE],[GENDER],[EDUCATION],[EMPLOY_DA ...

  5. 字符型SQL注入

      字符型SQL注入 很早就基于DVWA实现了字符型的SQL注入,但是一直感觉自己没有理解的特别清楚,这次又看了一下网上的一些讲解,试着总结一下.以下是我的一写浅薄见解,请大家批判着看. 基本原理 看 ...

  6. SQL语句表名或者字段名和保留字冲突解决方法

    最近开发遇到一个很奇葩的问题,简单做一下笔记 select * from Add ... 以上SQL语句会报错. 原因Add是表名,SQL语句保留字中又有Add 解决方法: select * from ...

  7. oracle 常用sql字符函数介绍

    常用字符函数介绍 1.ascii 返回与指定的字符对应的十进制数: SQL>select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') ...

  8. SQL 之 字符区别(转)

    1.CHAR.CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充,所以在读取的 ...

  9. SQL注入之PHP-MySQL实现手工注入-字符型

    SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎 ...

随机推荐

  1. 别再说Python没有枚举类型了,好好看看

    枚举类型可以看作是一种标签或是一系列常量的集合,通常用于表示某些特定的有限集合,例如星期.月份.状态等. Python 的原生类型(Built-in types)里并没有专门的枚举类型,但是我们可以通 ...

  2. TortoiseSVN客户端的使用说明

    1 安装TortoiseSVN客户端 准备安装文件,TortoiseSVN-1.6.16.21511-x64-svn-1.6.17.msi,双击进行安装,按照提示步骤安装,安装完成后需重启计算机,SV ...

  3. Swagger2 添加HTTP head参数

    大家使用swagger往往会和JWT一起使用,而一般使用jwt会将token放在head里,这样我们在使用swagger测试的时候并不方便,因为跨域问题它默认不能自定义head参数.然后自己去网上找, ...

  4. 【实战分享】又拍云 OpenResty / Nginx 服务优化实践

    2018 年 11 月 17 日,由 OpenResty 主办的 OpenResty Con 2018 在杭州举行.本次 OpenResty Con 的主题涉及 OpenResty 的新开源特性.业界 ...

  5. JVM基础系列第8讲:JVM 垃圾回收机制

    在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...

  6. 『骑士精神 IDA*』

    骑士精神(SCOI2005) Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵 ...

  7. 免费SSL证书(支持1.0、1.1、1.2)

    由于公司要开发微信小程序,而微信小程序的接口需要https协议的,并且要支持TLS1.0.TLS1.1.TLS1.2.如果仅仅是为了开发小程序,安全等级又不用太高,可以选择免费的SSL证书 在这里选择 ...

  8. redis 系列7 数据结构之跳跃表

    一.概述 跳跃表(skiplist)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的.在大部分情况下,跳跃表的效率可以和平衡树(关系型数据库的索引就是平衡树 ...

  9. Eureka中的核心概念

    图片的链接出了一点小bug,导致图片不能正常访问,小伙伴们可以移步这里:https://mp.weixin.qq.com/s/kAqOTKUt_qPlxzI4aGS5Pw 本文是Spring Clou ...

  10. PyQt:无边框自定义标题栏及最大化最小化窗体大小调整

    环境 Python3.5.2 PyQt5 陈述 隐藏掉系统的控制栏,实现了自定义的标题控制栏,以及关闭/最大化/最小化的功能,自由调整窗体大小的功能(跟随一个大佬学的),代码内有详细注释 只要把Mai ...