验证Sql列名称

时间:2017-10-10 18:05:41

标签: c# sql-server database sql-server-2008

我在一个数据库(不是SQL Server)中有4-5个表。

在我的UI中,用户可以在文本框中输入一些SQL条件和列名。我需要验证SQL是否正确以及这些列是否存在,并相应地显示任何错误。我在服务器端使用C#。

我有一个SQL Server数据库,我们的UI存储了所有与UI相关的信息。

一种方法是在我的SQL Server中创建所有这些表(只是表结构),然后在每个表上查询一个简单的选择并相应地显示错误或成功消息。

所以基本上我会有以下where子句或更多条件:

where a = b and c in(1,2)

如上所述,我将针对我在SQL Server中创建的每个表执行上面的where子句,如果列不存在则返回错误。

有没有更好的方法来解决这个问题?我想在没有在我的SQL Server上创建这么多表的情况下有其他方法可以工作。

我不想对这些进行硬编码,因为结构可能会在不久的将来发生变化。所以寻找一些可维护的解决方案。可以创建一个表并将所有这些信息存储在其中。

任何建议都表示赞赏。

3 个答案:

答案 0 :(得分:1)

在SQL Server中,您可以查询系统对象:  INFORMATION_SCHEMA.COLUMNS。

包含所有表和视图的所有列的列表。

但是,我同意之前的评论 - 你所描述的设计是糟糕的坏事。

答案 1 :(得分:0)

忽略SQL注入问题一秒钟,如果用户只能控制查询的WHERE子句,那么你可以尝试运行像

这样的东西
select top 0 * from <tables> where <user-entered-where-clause>

然后优雅地处理返回的任何错误。

答案 2 :(得分:0)

在MS sql server中使用dmv函数来验证查询字符串。 将用户字符串分配给变量@Str_query

将@Str_query声明为nvarchar(max); 设置@Str_query =&#39; SELECT [role_code],[role_description] FROM [dbname]。[dbo]。[Roles]&#39; SELECT error_message FROM sys.dm_exec_describe_first_result_set(@Str_query,NULL,0)WHERE column_ordinal = 0

如果有错误消息,则查询字符串无效执行。