0

是否可以在.NET 中将sql 语句传递给SQL Server 进行解析并返回语句中涉及的表和操作类型。所以对于这样的声明:

select * from Table1
left outer join Table2 on Table1.id=Table2.foreignid;
delete from Table2 where date < 2009/12/12

SQL Server 可能会像这样返回涉及的表:

Table1    Read
Table2    Read
Table2    Delete

所以该语句没有被执行,它只是返回所涉及的表。

我问的原因是我正在处理的应用程序具有应用程序级别的表权限,我想逐个表地应用这些权限。当前解析语句中涉及的表的方法使用正则表达式,并且在除了简单语句之外的任何其他方法中都失败了。显然你不能真正使用正则表达式来完成这种工作

4

2 回答 2

2

SET SHOWPLAN_ALL会为你做吗?它模拟服务器上的调用查询,您也许能够解析结果。

编辑:看起来SET SHOWPLAN_TEXT会更容易解析。

于 2010-02-23T20:55:43.690 回答
1

我问的原因是我正在处理的应用程序具有应用程序级别的表权限,我想逐个表地应用这些权限。

在我看来,您应该创建一个数据库级别的角色来捕获这些权限,并将它们应用于该级别。您为数据库管理系统付费 - 不要花时间编写现有解决方案最适合的工作。

应用程序级别的权限可能在行级别上有意义,甚至可以在数据库中实现。但是,如果他们在桌面级别,我看不出有任何借口可以证明自己执行编码是正当的。使用您的数据库,您为此付费。

于 2010-02-23T22:40:06.620 回答