SQL语句的可能首字母有哪些?

3
我正在构建一个用户界面,以便在SQL Server数据库上执行SQL语句(兼容SQL Server 2008 R2)。我需要确定每个语句是否可能返回数据集,或者它只需要被执行。在Delphi中,TADOQuery包含Open/Close(用于数据集)或ExecSQL(仅用于执行)两种方法。我需要自动确定应该基于SQL语句的前几个单词调用哪种方法。
我应该如何确定应该基于语句的前几个单词调用哪种方法?我需要知道每个可能的单词,以及根据每个单词使用哪种方法。

7
不要因为我们知道答案是“你不能”而进行负评。这是一个合法的问题。 - siride
2
我的猜测是SELECT返回行,而其他命令可能返回数据。否则,您需要准备语句,并从结果列定义中查看是否有一些数据可检索。让数据库引擎为您解析SQL! - Arnaud Bouchez
1个回答

8

从一般意义上来说是不可能的。例如,EXEC 存储过程名称 可以返回结果集或者不返回结果集,这取决于存储过程的编写方式。无法仅从调用语法中了解到它是哪个类型。


3
此外,即使使用了 update/delete/insert,如果与 output 结合使用,也可能返回行。 - GSerg
1
WITH 可以作为查询或 DML 语句的前缀。 - RBarryYoung
1
一个存储过程可以返回多个结果集。 - HABO
5
@Jerry,不是的,你可以使用NextRecordset方法来处理多个记录集(结果集,或者你称之为数据集)。无论如何,我不明白这个问题的原因。你需要知道某个查询或存储过程是否返回了结果 - 而且,你需要知道它返回了什么,如果有的话,因为你后面需要处理这些数据。另一方面,这是一个有趣的话题![+1] - TLama
3
SQL Server T-SQL不“支持” GOGO是作为SSIS、iSQL等的一部分实现的。参见http://msdn.microsoft.com/en-us/library/ms188037.aspx。T-SQL使用`;`来确定语句的结尾。 - Gerry Coll
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接