Skip to main content
 首页 » 编程设计

c#之从 SQL 语句中提取更新列的正则表达式

2024年02月03日30arxive

我需要一个 Regex 语句(在 c# 中运行),它将一个包含 Sql Update 语句的字符串作为输入,并将返回要更新的列列表。它应该能够处理是否被括号包围的列。

// Example Sql Statement 
Update Employees 
Set FirstName = 'Jim', [LastName] = 'Smith', CodeNum = codes.Num 
From Employees as em 
Join CodeNumbers as codes on codes.EmployeeID = em.EmployeeID 

最后我想返回一个 IEnumerable 或 List 包含:

  1. 名字
  2. 姓氏
  3. 代码编号

有人对实现有什么好的建议吗?

更新:sql 是用户生成的,因此我必须按给定的方式解析 Sql。在我的案例中提取列名的目的是验证用户是否有权更新查询中包含的列。

请您参考如下方法:

你在倒退。以分解形式存储数据,将要更新的表、列名和生成新值的表达式全部分开。从这个规范的表示中,生成 SQL(当你需要它时)和正在更新的列列表(当你需要它时)。

如果您绝对必须从 SQL 语句中提取列名,我认为正则表达式不是正确的方法。例如,在一般情况下,您可能需要跳过包含任意嵌套括号的新值表达式。您可能需要一个完整的 SQL 解析器。 Levine、Mason 和 Brown 合着的Lex & Yacc 一书有一章是关于解析 SQL 的。

更新响应: 你处在一个充满伤害的世界里。做你想做的事情的唯一方法是完全解析 SQL,因为你还需要确保你没有任何子表达式执行未经授权的操作。

我非常非常强烈地建议您想出另一种方法来做您正在做的事情。也许将可修改的字段分解到一个单独的表中并使用访问控制?也许想出另一个界面供他们用来指定他们想要完成的事情?无论您在做什么,几乎可以肯定有更好的方法。在那条路上有龙。