我在一个数据库(不是SQL Server)中有4-5个表。
在我的UI中,用户可以在文本框中输入一些SQL条件和列名。我需要验证SQL是否正确,以及这些列是否存在,并相应地显示任何错误。我在服务器端使用C#。
我有一个SQL Server数据库,其中我们的UI存储所有与UI相关的信息。
一种方法是在我的SQL Server中创建所有这些表(只是表结构),然后对每个表进行简单的select查询,并相应地显示错误或成功消息。
因此,基本上我会使用where子句,如下所示或更多条件:
where a = b and c in(1,2)如上所述,我将对我在SQL Server中创建的每个表执行上面的where子句,如果列不存在,它将返回错误。
有没有更好的方法来解决这个问题?我在想,如果有其他方法可以工作,而不用在我的SQL Server上创建这么多表。
我不想硬编码这些,因为结构可能会在不久的将来发生变化。因此,寻找一些可维护的解决方案。可以创建一个单独的表,并将所有这些信息存储在其中。
如有任何建议,欢迎光临。
发布于 2017-10-11 03:41:48
在SQL server中,您可以查询系统对象: information_schema.columns。
它包含所有表和视图的所有列的列表。
然而,我同意之前的评论--你描述的设计很糟糕很糟糕。
发布于 2017-10-11 03:12:04
暂时忽略SQL注入问题,如果用户只能控制查询的WHERE子句,那么您可以尝试运行如下所示的命令
select top 0 * from <tables> where <user-entered-where-clause>然后优雅地处理返回的任何错误。
发布于 2017-12-05 01:18:18
使用MS sql server中的dmv函数验证查询字符串。将用户字符串分配给变量@Str_query
将@Str_query声明为nvarchar(max);设置@Str_query ='SELECT role_code,role_description FROM dbname.dbo.Roles‘SELECT error_message FROM column_ordinal NULL,0) WHERE column_ordinal=0
如果出现错误消息,则查询字符串无效,无法执行。
https://stackoverflow.com/questions/46673166
复制相似问题