我正在构建一个用户界面,以便能够在SQL Server数据库上执行SQL语句,在SQL Server 2008 R2上兼容。我需要能够确定每个语句是否可能返回一个数据集,或者是否只需要执行它。在Delphi中,TADOQuery
由数据集的Open
/Close
或ExecSQL
组成。我需要根据SQL语句的第一个字自动确定使用哪一个。SQL语句的所有可能的首字是什么?
如何根据声明中的第一个词来确定我应该调用哪种方法?我需要知道每个可能的单词,以及基于每个单词的方法。
我正在构建一个用户界面,以便能够在SQL Server数据库上执行SQL语句,在SQL Server 2008 R2上兼容。我需要能够确定每个语句是否可能返回一个数据集,或者是否只需要执行它。在Delphi中,TADOQuery
由数据集的Open
/Close
或ExecSQL
组成。我需要根据SQL语句的第一个字自动确定使用哪一个。SQL语句的所有可能的首字是什么?
如何根据声明中的第一个词来确定我应该调用哪种方法?我需要知道每个可能的单词,以及基于每个单词的方法。
这在一般意义上是不可能的。 EXEC存储过程名称例如可以让eithers返回一个结果集或不是,这取决于proc的写法。根据通话的语法,无法知道它是一个还是另一个。
为了补充说明,即使'update' /'delete' /'insert'可能会返回行,如果再加上'output'。 – GSerg 2013-02-18 01:15:09
而“WITH”可以是查询或DML语句的前缀。 – RBarryYoung 2013-02-18 01:20:05
存储过程可能会返回多个结果集。 – HABO 2013-02-18 02:27:49
让我们不要低估,因为我们知道答案是“你不能”。这是一个合法的问题。 – siride 2013-02-18 01:18:40
我的猜测是SELECT返回行,而其他命令*可能*返回数据。否则,您需要准备该语句,并从结果列定义中查看是否有要检索的数据。让DB引擎为你解析SQL! – 2013-02-18 06:40:28