Modifying Data Through a View

Można modyfikować dane z podstawowej tabela bazowa, korzystając z widoku w taki sam sposób, jak zmodyfikować dane w tabeli za pomocą instrukcja UPDATE, INSERT i DELETE lub przy użyciu BCP narzędzie i instrukcja BULK INSERT.Jednak następujące ograniczenia dotyczą Aktualizowanie widoków, ale nie mają zastosowania do tabel:

Uwaga

Niektóre z następujących ograniczeń nie dotyczą widoki na podzielonym na partycje, a żaden z ograniczenia dotyczą aktualizacje, które są stosowane za pośrednictwem, a nie z wyzwalaczami.Aby uzyskać więcej informacji zobacz "Inne opcje dla modyfikowanie za pomocą a widoku danych" w dalszej części tego tematu.

  • Słoweński (Słowenia)

  • Kolumny, które są modyfikowany w widoku musi odwoływać się danych źródłowych w kolumnach tabela bezpośrednio.One nie mogą pochodzić w inny sposób, na przykład za pomocą:

    • Funkcja agregująca (AVG, COUNT, agregacja, MIN, MAX, grupowanie, ODCH.standardowe, STDEVP, VAR i VARP).

    • A obliczeń; nie można obliczyć kolumna z wyrażenie przy użyciu innych kolumn.Utworzone przy użyciu operatorów zestaw kolumn (UNION, UNION ALL, CROSSJOIN, EXCEPT i PRZETNIJ) kwota obliczenie i nie są również mogą być aktualizowane.

  • Kolumny, które są modyfikowany nie dotyczy GROUP BY, HAVING lub klauzul DISTINCT.

  • TOP nie mogą być używane w dowolnym miejscu w select_statement gdy WITH OPTION wyboru określony jest również widoku.

Hiszpański (Ekwador)Ogólnie rzecz biorąc, SQL Server 2008 musi być jednoznacznie śledzenia zmian z definicji widoku z jednej tabela bazowa. Na przykład następujący widok nie jest aktualizowalny:

CREATE VIEW TotalSalesContacts
AS
SELECT C.LastName, 
SUM(O.TotalDue) AS TotalSales
FROM Sales.SalesOrderHeader O, Person.Contact C
WHERE C.ContactID = O.ContactID
GROUP BY LastName

Zmiany wprowadzone do LastName kolumna TotalSalesContacts byłoby nie do przyjęcia, ponieważ ma już dotyczy kolumna GROUP BY Klauzula. Jeśli istnieje więcej niż jedno wystąpienie tego samego nazwiska SQL Server nie będą wiedzieć, która z nich do aktualizacji, wstawiania lub usunąć. Likewise, an attempt instead to modify the TotalSales column of TotalSalesContacts would return an error, because it is a column that is derived from an aggregate function.SQL Server cannot trace this column directly to its base table, SalesOrderHeader.

Stosuje się następujące dodatkowe wskazówki:

  • Wszystkie instrukcje modyfikacji danych wykonywane przed widoku muszą być zgodne z kryteriami określonymi w instrukcja SELECT, Definiowanie widoku użycie klauzula WITH OPTION Sprawdź w definicji widoku.Użycie klauzula WITH OPTION Sprawdź wiersze nie mogą być modyfikowane w taki sposób, że powoduje, że ich znikają z widoku.Spowodowałoby to się zdarzyć, modyfikacji zostanie anulowany i wyświetlany jest błąd.

  • Instrukcji INSERT musi określić wartości dla każdej kolumny w tabela źródłowa, nie zezwolić na wartości null i mieć definicje nie DEFAULT.

  • Dane zmodyfikowane w kolumnach w tabela podstawowej muszą stosować się do ograniczenia na podstawie tych kolumn, takie jak opcje dopuszczania wartości null, ograniczeń, definicji DEFAULT i tak dalej.Na przykład jeśli wiersz zostanie usunięty, wszystkie podstawowe ograniczenia klucz obcy w tabelach pokrewnych muszą nadal spełnione o usunięcie powiodła się.

  • Widok rozproszonych partycji (Widok zdalna) nie można zaktualizować za pomocą kursor, którego podstawę stanowi zestaw kluczy.To ograniczenie może być rozpoznana przez deklarowanie kursor w podstawowych tabelach, a nie samego widoku.

  • Nie jest obsługiwany przez zbiorczej importowania danych do widoku podzielonym na partycje BCP lub ZBIORCZEGO INSERT i INSERT...Zawsze zwraca wartość NULLJednak wstawić wiele wierszy do wyświetlenia podzielonym na partycje przy użyciu WSTAWIANIE instrukcja.Aby uzyskać więcej informacji zobaczBulk Exporting Data from or Bulk Importing Data to a View.

  • Nie można użyć instrukcji READTEXT i WRITETEXT text, ntext, lub image kolumny w widoku.

Inne opcje dla modyfikacja danych, korzystając z widoku

Jeśli ograniczenia, opisane wcześniej w tym temacie uniemożliwić zmianę danych bezpośrednio przy użyciu widoku, należy wziąć pod uwagę następujące opcje:

  • Użycie INSTEAD Z wyzwalaczy z logiką, służący do obsługi instrukcje INSERT, UPDATE i DELETE.Aby uzyskać więcej informacji zobaczDesigning INSTEAD OF Triggers.

  • Za pomocą widoków można aktualizować podzielonym na partycje, polegające na zmodyfikowaniu jednego lub kilku tabelach element członkowski.Aby uzyskać więcej informacji zobaczCreating Partitioned Views.

Aby dodać dane, korzystając z widoku

Aby zmienić dane, korzystając z widoku

Aby usunąć dane, korzystając z widoku

See Also

Concepts