获取SQL列名称&值

时间:2012-12-06 14:02:29

标签: c# sql parsing

我想问一下如何提取列名称&它们各自的值来自SQL查询而不执行语句。

例如:

select * from table where fieldname = 'fieldvalue'

我想从查询中提取“FieldName”和“FieldValue”。

Insert into table (field,field2,field3) 
values ('fieldvalue','field2avlue','field3'svalue')

我想从查询中提取“field”,“field2”和“fieldvalue”,“field2avlue”,“field3'svalue”。

2 个答案:

答案 0 :(得分:0)

根据你对Steve的回答,你在谈论自己解析它?如果您通过查看表元数据(如上面的“select *”中的“*”)来解决任何问题,则不能仅基于代码执行此操作。您还必须拥有表元数据。如果你真的在谈论你在这里所说的话,那你就是在谈论重建DBMS本身的一个主要组成部分。就像史蒂夫所说 - 这是一项艰巨的任务。

如果您没有尝试编写自己的SQL解析器,并且您确实可以访问应用程序中的数据库,那么这实际上非常简单。这也不是一个不合理的问题 - 可能存在真正的应用程序,你需要结果集元数据而不运行一些可能有大量执行时间的查询,或者其他类似的限制。

要获取元数据而不获取任何重要的执行时间,在所涉及的表等上放置任何锁定,请在where子句中放置一个谓词,该子句由保证失败的文字值组成。所有现代DBMS都足够聪明,可以对此进行优化,不会返回任何行,但是大多数用于检索结果的API仍然会捕获结果集元数据。您将执行查询,但查询将快速运行,不锁定任何内容,并为您提供结果元数据。

示例:

select 
    <lots of stuff>
from
    <complicated subquery>
where 
    <there are a ton of predicates>
    AND 0=1

最后一行是什么保证没有结果。

答案 1 :(得分:0)

我正在使用@Sandra Walters的建议,即:解决该问题的理想方法是在将字段值包含在SQL查询之前清理它们,您需要表的元数据才能在SQL之后正确执行查询已经建立。