如何确定 SQL 查询是否为 SELECT?

dze*_*zen 5 sql validation select

早上好。

编辑

我想对 sql 查询进行一些验证,以验证此查询是 SELECT 而不是 UPDATE 或 DELETE 或 INSERT 或任何 sql 奇怪的语句。

我知道最简单的方法是匹配 "^SELECT" BUT :

  • 查询可以以“(”开头,例如

    (SELECT * FROM blah WHERE id > 1 LIMIT 3) UNION (SELECT * ...)

  • 查询可以以“ WITH RECURSIVE ”开头

    WITH RECURSIVE cte AS (SELECT * FROM blah)

我想确定一个 SQL 查询是否是一个 SELECT。好吧,我不知道在编写正则表达式之前是否需要了解一些奇怪的查询。

任何帮助表示赞赏。

编辑:我想检查它是否是 PURE Select 查询:)

J V*_*J V 1

您还可以制作更新语句,在内部运行自己的 SELECT 来查找要更新的数据,或者使用许多其他方式将语句嵌入到彼此中...假设您不使用“SELECT”作为数据或字段名称,只需运行正则表达式否则/\bselect\b/i你将需要一个完整的解析器。

编辑:另外:/\b(insert|update)\b/i反转它以确保其中没有它们。

  • 从技术上讲,以下内容在 SQL Server 中是允许的`create table [ insert ] ([ update ] int); 插入[插入]值(1); 从[插入]中选择[更新]` (3认同)