什么是SQL“FOR BROWSE”选项用于?

时间:2012-06-08 15:38:12

标签: sql sql-server sql-server-2008 tsql

我正在处理查询,并且在select语句的TSQL“FOR BROWSE”选项中找到了Microsoft的最少文档。

我已经看到FOR BROWSE被记录为游标的一个选项,但我找不到任何使用它的好例子,或者在SELECT语句中使用FOR BROWSE的理由。

在TSQL SELECT语句中使用FOR BROWSE有什么好理由?

我正在使用SQL Server 2008和2012。

2 个答案:

答案 0 :(得分:7)

据我所知。它似乎是在应用程序中实现optimistic concurrency control的接口,其中一个或多个用户将同时访问和更新来自同一源的数据。它似乎也与兼容的前端库(DB-Library)一起使用。但是,看起来这是一种有点弃用的机制,因为您可以在不使用“For Browse”语句的情况下实现上述所有操作。这可以通过创建两个DBPROCESS结构的必要性来进一步证实,这两个结构是DB-Library(一个已弃用的C库)调用“dbopen”的结果。

  

此外,浏览模式需要两个DBPROCESS结构:一个用于   根据所选数据选择数据和另一个进行更新   数据。 src

Here is an example将“For Browse”查询与DB-Library结合使用。

最终,可以合理地断定此机制仍然存在以实现向后兼容性。因此,除非您使用DB-Library维护基于C的客户端,否则我不会太担心这个sql“for clause”。

其他一些来源

再观察一次

  

使用FOR BROWSE声明的游标必须等待未提交的更改   (仅限OPEN期间由任何人制作,包括光标所有者)   CURSOR操作。光标打开后,后续更改不会   使光标等待。重新打开游标时,可以阻止它   通过未提交的更改。 src

答案 1 :(得分:1)

可能需要将FOR BROWSE附加到SQL SELECT语句或在SQL Server连接上使用SET NO_BROWSETABLE ON来检索更精细的架构信息。

如果应用程序通过ODBC层与SQL Server直接或间接交互,这可能很有用,因为ODBC函数SQLColAttribute返回的某些详细信息将返回空字符串,除非SQL SELECT附加了FOR BROWSE

例如,如果您的C ++应用程序使用libodbc++并且您从查询SELECT * FROM A,B获得结果集,则无法从ResultSetMetaData对象中检索列的表名。但是,如果添加FOR BROWSE,表名将被相应地填充。