2008年10月2日 星期四

SET NO_BROWSETABLE ON

在 SQL Server 線上叢書 》, " FOR 子句 」 主題不包含完整的資訊。 這份文件包含其他資訊將會包含在 「 FOR 子句 」 主題中的引數 " BROWSE 」 一節。 此外, 本文也將告訴您的案例中, 說明其他資訊。

其他相關資訊


引數 " BROWSE 」 一節中的 " " 引數 ] 區段的 SQL Server 線上叢書 》 主題 「 FOR 子句 」 包括下列資訊:


請注意 當唯一索引鍵資料行的資料表可以接受 Null 值, 和資料表是在內部端的外部聯結作業, 瀏覽模式就不支援索引。


瀏覽模式可讓您掃描您的 SQL Server 資料表中資料列並在同一時間更新您的資料表一個資料列中的資料。 若要存取 SQL Server 資料表在您應用程式在瀏覽模式, 您必須使用的下列兩個選項之一:
必須以關鍵字 FOR BROWSE 結尾 SELECT 陳述式, 讓您用來從您的 SQL Server 資料表存取資料。 當您開啟 FOR BROWSE 選項設定為使用瀏覽模式, 會建立暫存資料表。
您必須執行下列 Transact - SQL 陳述式以瀏覽模式開啟藉由使用 NO_BROWSETABLE 選項:
SET NO_BROWSETABLE ON
當您開啟於 NO_BROWSETABLE 選項, 所有 SELECT 陳述式行為就好像 FOR BROWSE 選項會附加至陳述式。 不過, NO_BROWSETABLE 選項並不會建立暫存表格, FOR BROWSE 選項通常會用來將結果傳送到您的應用程式。
當您試著存取從 SQL Server 資料表中的資料瀏覽模式藉由使用 SELECT 查詢牽涉到的外部聯結陳述式, 而且唯一索引定義在資料表已存在於內部的外部聯結陳述式, 端時, 瀏覽模式不支援唯一索引。 只有當所有索引鍵資料行唯一索引可接受 Null 值瀏覽模式支援唯一索引。 瀏覽模式不支援唯一索引, 如果下列條件為真:
您嘗試藉由使用 SELECT 查詢牽涉到外部聯結陳述式從 SQL Server 資料表在瀏覽模式下存取資料。
唯一索引定義在資料表已存在於內部端的外部聯結陳述式。
如果要重現此行為在瀏覽模式, 請依照下列步驟執行:
1.啟動 SQL Server Management Studio, 然後再連接到 SQL Server 2005 的執行個體。
2.建立資料庫, 並命名 SampleDB 資料庫。
3.在資料庫, SampleDB 建立 tleft 資料表和兩者都包含單一資料行 c 1, 並命名為 「 tright 資料 」 資料表。 在 tleft 資料表, 中的資料行 c 1 上定義唯一的索引, 將資料行設定為接受 Null 值。 在適當的查詢視窗中如果要執行這項操作, 執行下列 Transact - SQL 陳述式:

CREATE TABLE tleft(c1 INT NULL UNIQUE)
GO
CREATE TABLE tright(c1 INT NULL)
GO
4.在資料 tleft 表與 tright 資料表中插入多個值。 請確定在 tleft 資料表中, 插入 Null 值。 若要執行這項, 在 [ 查詢 ] 視窗執行下列 Transact - SQL 陳述式:

INSERT INTO tleft VALUES(2)
INSERT INTO tleft VALUES(NULL)
INSERT INTO tright VALUES(1)
INSERT INTO tright VALUES(3)
INSERT INTO tright VALUES(NULL)
GO
5.開啟 [ NO_BROWSETABLE 選項。 若要執行這項, 在 [ 查詢 ] 視窗執行下列 Transact - SQL 陳述式:

SET NO_BROWSETABLE ON
GO
6.可以在 SELECT 查詢使用外部聯結陳述式存取資料 tleft 表與 tright 資料表中的資料。 請確定該 tleft 資料表是在內部端的外部聯結陳述式。 若要執行這項, 在 [ 查詢 ] 視窗執行下列 Transact - SQL 陳述式:

SELECT
tleft.c1
FROM
tleft RIGHT JOIN tright
ON
tleft.c1 = tright.c1
WHERE
tright.c1 <> 2
請注意結果 ] 窗格中下列輸出:
c1
----
NULL
NULL
在您執行 SELECT 查詢, 以存取資料表在瀏覽模式, 的 SELECT 查詢結果集包含兩個 Null 值為 tleft 資料表中資料行 c 1 之定義的右外部聯結陳述式, 因為。 因此, 在結果集中, 您無法區別 Null 值, 來自資料表和 Null 值, 引入右外部聯結陳述式。 如果您必須忽略 Null 值從結果集可能會收到不正確的結果。


注意 如果 that are included in 唯一索引資料行不接受 Null 值, 在結果集中所有的 Null 值已引入由右外部聯結陳述式。

set FMTONLY on

--只顯示資料行名稱
set FMTONLY on
set FMTONLY off