首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证Sql列名

验证Sql列名
EN

Stack Overflow用户
提问于 2017-10-11 02:05:41
回答 3查看 895关注 0票数 0

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

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

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

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

因此,基本上我会使用where子句,如下所示或更多条件:

代码语言:javascript
复制
where a = b and c in(1,2)

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

有没有更好的方法来解决这个问题?我在想,如果有其他方法可以工作,而不用在我的SQL Server上创建这么多表。

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

如有任何建议,欢迎光临。

EN

回答 3

Stack Overflow用户

发布于 2017-10-11 03:41:48

在SQL server中,您可以查询系统对象: information_schema.columns。

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

然而,我同意之前的评论--你描述的设计很糟糕很糟糕。

票数 1
EN

Stack Overflow用户

发布于 2017-10-11 03:12:04

暂时忽略SQL注入问题,如果用户只能控制查询的WHERE子句,那么您可以尝试运行如下所示的命令

代码语言:javascript
复制
select top 0 * from <tables> where <user-entered-where-clause>

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

票数 0
EN

Stack Overflow用户

发布于 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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46673166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档