0

我想问如何在不执行语句的情况下从 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”。

4

2 回答 2

0

根据您对史蒂夫的回答,您是在谈论自己解析它吗?如果您有任何可以通过查看表元数据(如上面的“select *”中的“*”)来解决的问题,那么您不能仅基于代码来执行此操作。您也必须拥有表元数据。如果您真的在谈论做您在此处所说的事情,那么您就是在谈论重新创建 DBMS 本身的一个主要组件。就像史蒂夫说的那样——这是一项艰巨的任务。

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

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

例子:

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

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

于 2012-12-06T19:26:11.450 回答
0

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

于 2012-12-10T17:33:47.180 回答