12

我正在处理一个查询,并且在选择语句的 TSQL“FOR BROWSE”选项上找到了 Microsoft 提供的最少文档。

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

在 TSQL SELECT 语句中使用 FOR BROWSE 的充分理由是什么?

我正在使用 SQL Server 2008 和 2012。

4

2 回答 2

8

据我所知。它似乎是一个用于在应用程序中实现乐观并发控制的接口,其中一个或多个用户将同时访问和更新来自同一源的数据。它似乎还可以与兼容的前端库 ( DB-Library ) 结合使用。但是,这似乎是一种有些过时的机制,因为您可以在不使用“ For Browse ”语句的情况下实现上述所有功能。这可以通过创建两个 DBPROCESS 结构来进一步证实,这两个结构是 DB-Library(不推荐使用的 C 库)调用“ dbopen ”的结果。

此外,浏览模式需要两种 DBPROCESS 结构:一种用于选择数据,另一种用于根据选择的数据进行更新。源代码

下面是结合 DB-Library 使用“For Browse”查询的示例。

最终,可以合理地得出结论,为了向后兼容,这种机制仍然存在。因此,除非您使用 DB-Library 维护基于 C 的客户端,否则我不会太担心这个 sql“ for 子句”。

其他一些来源

再观察

用 FOR BROWSE 声明的游标必须仅在 OPEN CURSOR 操作期间等待未提交的更改(由任何人,包括游标所有者进行)。游标打开后,后续更改不会导致游标等待。当游标重新打开时,它可能会被未提交的更改阻止。源代码

于 2012-06-11T03:03:23.880 回答
2

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

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

For example, if your C++ app uses libodbc++ and you get a result set from the query SELECT * FROM A, B you will not be able to retrieve the table names of the columns from the ResultSetMetaData object. However, if you add FOR BROWSE, the table names will be populated corretly.

于 2015-04-15T08:21:15.697 回答