Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正则表达式验证SQL脚本,只允许创建|更改|删除以查看|过程|触发器_Sql_.net_Sql Server_Regex_Validation - Fatal编程技术网

正则表达式验证SQL脚本,只允许创建|更改|删除以查看|过程|触发器

正则表达式验证SQL脚本,只允许创建|更改|删除以查看|过程|触发器,sql,.net,sql-server,regex,validation,Sql,.net,Sql Server,Regex,Validation,我必须验证自动数据库升级过程的SQL脚本 我只需要为“过程|触发|视图”自动调整CREATE | ALTER | DROP函数的大小 目前,我将此函数与regex一起使用,以验证: Public Function ValidateScript(script as string) as Boolean Regex.IsMatch(script.Trim, "^(CREATE|ALTER|DROP)\\s+(PROCEDURE|TRIGGER|VIEW)") End Function 但是

我必须验证自动数据库升级过程的SQL脚本

我只需要为“过程|触发|视图”自动调整CREATE | ALTER | DROP函数的大小

目前,我将此函数与regex一起使用,以验证:

Public Function ValidateScript(script as string) as Boolean
    Regex.IsMatch(script.Trim, "^(CREATE|ALTER|DROP)\\s+(PROCEDURE|TRIGGER|VIEW)")
End Function
但是如果脚本包含2条这样的指令

CREATE PROCEDURE XXX as ...
    Instruction1;
    Instruction2;
    ...
GO (OR ;)
DROP TABLE
GO (OR ;)
验证返回True

如何验证包含许多指令的脚本


谢谢!

标记您使用的dbms!(SQL脚本通常是特定于产品的。)按关键字GO拆分脚本,然后分析每个节点的有效性。您需要防止上一个脚本中出现完全匹配,或者只选择符合要求的查询(即
创建过程
)?听起来你需要一个解析器,而不仅仅是一个正则表达式。我必须允许为创建特定对象而执行脚本,如果它们包含未经授权的指令,我必须阻止执行。这是为了批处理,执行脚本的用户将拥有对数据库的所有权限。