修改資料分割檢視中的資料

如果資料分割檢視無法更新,它便只能做為原始資料表的唯讀副本。可更新的資料分割檢視可以展現原始資料表的所有能力。

若檢視是一組 SELECT 陳述式,且其個別的結果集已使用 UNION ALL 陳述式合併成一個結果集,則會被視為可更新的資料分割檢視。每一個 SELECT 陳述式會參考一個 SQL Server 基底資料表。資料表可以是本機資料表,或是使用四個部分組成的名稱、OPENROWSET 函數或 OPENDATASOURCE 函數加以參考的連結資料表 (不可使用指定傳遞查詢的 OPENDATASOURCE 或 OPENROWSET 函數)。

此外,參考檢視的資料修改陳述式,必須遵循針對 INSERT、UPDATE 與 DELETE 陳述式所定義的規則。

[!附註]

bcp 命令、BULK INSERT 陳述式或 INSERT ... SELECT * FROM OPENROWSET(BULK...) 陳述式不支援大量匯入資料分割檢視。不過,您可以使用 INSERT 陳述式,將多個資料列插入資料分割檢視中。

若資料分割檢視是跨各個伺服器分散,請避免在基底資料表上使用觸發程序或串聯式動作。觸發程序或串聯式動作可能會對基礎資料有所變更,進而影響到檢視的定義。

唯有當使用者對於該檢視的每一份基礎資料表具有 CONTROL、ALTER、TAKE OWNERSHIP 或 VIEW DEFINITION 權限時,才可更新分散式資料分割檢視。如需詳細資訊,請參閱<疑難排解分散式資料分割檢視的中繼資料可見性>。

[!附註]

您必須安裝 SQL Server 2008 Enterprise 或 SQL Server 2008 Developer,才能透過分散式資料分割檢視來修改資料。但在任何版本的 SQL Server 2008 上,您都可以透過本機資料分割檢視來修改資料。

INSERT 陳述式

INSERT 陳述式透過資料分割檢視將資料加入成員資料表。INSERT 陳述式必須遵循這些規則:

  • 所有資料行都必須包含在 INSERT 陳述式中,即使資料行在基底資料表中可以是 NULL,或基底資料表中已定義 DEFAULT 條件約束。

  • 不能在 INSERT 陳述式的 VALUES 子句中指定 DEFAULT 關鍵字。

  • INSERT 陳述式提供的數值必須滿足為成員資料表之一的資料分割資料行定義的 CHECK 條件約束邏輯。

  • 如果成員資料表中包含有識別屬性的資料行,就不允許使用 INSERT 陳述式。

  • 如果成員資料表中包含 timestamp 資料行,就不允許使用 INSERT 陳述式。

  • 如果有與同一個檢視或任何成員資料表關聯的自我聯結,就不允許使用 INSERT 陳述式。

UPDATE 陳述式

UPDATE 陳述式透過資料分割檢視修改一個或多個成員資料表中的資料。UPDATE 陳述式必須遵循這些規則:

  • UPDATE 陳述式不能指定 DEFAULT 關鍵字做為 SET 子句中的值,即使資料行在對應的成員資料表中已定義 DEFAULT 值。

  • 不能變更含識別屬性的資料行:但是可以更新其他資料行。

  • 如果資料行包含 text、image 或 ntext 資料,則無法變更 PRIMARY KEY 的值。

  • 如果基底資料表中包含 timestamp 資料行,就不允許更新。

  • 如果有與同一個檢視或任何成員資料表關聯的自我聯結,就不允許更新。

DELETE 陳述式

DELETE 陳述式透過資料分割檢視刪除一個或多個成員資料表中的資料。如果有與同一個檢視或任何成員資料表關聯的自我聯結,就不允許使用 DELETE 陳述式。