Modyfikowanie danych przy użyciu widoku

Dane z podstawowej można modyfikować tabela bazowa korzystając z widoku w taki sam sposób, jak możesz zmodyfikować dane w tabeli za pomocą instrukcja UPDATE, INSERT i DELETE lub bcp Narzędzie i WSTAW luzem instrukcja.Jednak następujące ograniczenia dotyczą Aktualizowanie widoków, ale nie mają zastosowania do tabel:

Ostrzeżenie

Niektóre z następujących ograniczeń nie dotyczą widoków partycji i brak ograniczeń stosuje się do aktualizacji, które są stosowane za pośrednictwem zamiast wyzwalaczy.Aby uzyskać więcej informacji zobacz "Inne opcje dla modyfikowania danych za pośrednictwem widoku" w dalszej części tego tematu.

  • Wszelkie modyfikacje, w tym instrukcje UPDATE, INSERT i DELETE musi odwoływać się do kolumn z tylko jednego tabela bazowa.

  • Kolumny, które są modyfikowane w widoku należy odwołać bezpośrednio podstawowych danych w kolumnach tabela.One nie ustalane w inny sposób, takie jak:

    • Funkcja agregująca (średnia, licznik, wartość zagregowana, MIN, MAX, grupowanie, STDEV, STDEVP, VAR i VARP).

    • Obliczenie; kolumna nie można obliczyć z wyrażenie przy użyciu innych kolumn.Tworzone za pomocą operatorów zestaw kolumn (Unii, UNION ALL, CROSSJOIN, oprócz i część wspólna) kwota obliczenie i nie są również aktualizowalny.

  • Kolumny, które są modyfikowane, nie dotyczy Grupuj według, HAVING lub klauzul DISTINCT.

  • GÓRY nie można używać w dowolnym miejscu w select_statement widoku, gdy określony jest również z opcji Sprawdź.

Poprzednie ograniczenia stosuje się do wszelkich podkwerendy w klauzula FROM widoku, podobnie jak dotyczą samego widoku.Ogólnie rzecz biorąc SQL Server musi być w stanie jednoznacznie śledzenia zmian z definicji widoku jednej tabela bazowa.Na przykład następujący widok nie jest aktualizowalny:

USE AdventureWorks2008R2;
GO
CREATE VIEW Sales.TotalSalesContacts
AS
    SELECT p.LastName, 
           SUM(o.TotalDue) AS TotalSales
    FROM Sales.SalesOrderHeader AS o, Person.Person AS p
    WHERE p.BusinessEntityID = o.CustomerID
    GROUP BY LastName;

Zmiany wprowadzone do LastName kolumna TotalSalesContacts byłby niedopuszczalny, ponieważ kolumna zostały dotknięte GROUP BY klauzula.Jeśli istnieje więcej niż jedno wystąpienie to samo nazwisko, SQL Server nie będzie wiadomo, do aktualizacji, wstawiania, która z nich lub Usuń.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 wytyczne:

  • Wszystkie instrukcje modyfikacji danych wykonywane widoku muszą być zgodne z kryteriami zestaw w instrukcja SELECT, Definiowanie widoku, jeśli klauzula z opcji Sprawdź, czy jest używana w definicji widoku.Użycie klauzula z opcji Sprawdzanie wierszy nie mogą być modyfikowane w sposób powodujący ich znikają z widoku.Anulowane zmianach spowodowałoby to niepożądane i wyświetlany jest błąd.

  • Instrukcji INSERT, należy określić wartości dla kolumn w tabela źródłowa , nie zezwalaj na wartości null i definicje domyślnego nie ma.

  • Dane zmodyfikowane w kolumnach w tabela źródłowa muszą być zgodne z ograniczeń dotyczących tych kolumn, takie jak opcje dopuszczania wartości null, ograniczenia, domyślna definicje itd.Na przykład jeśli wiersz zostanie usunięty, wszystkie podstawowe ograniczenia klucza OBCEGO w tabelach pokrewnych musi nadal spełnione dla usuwania powiodła się.

  • Widok rozproszonych partycji (Widok zdalna) nie mogą być aktualizowane przy użyciu kursor, którego podstawę stanowi zestaw kluczy.Ograniczenie to może być rozpoznana przez zadeklarowanie kursor na tabel, a nie samego widoku.

  • Luzem, importowanie danych do widoku podzielonym na partycje jest obsługiwany przez bcp lub WSTAW luzem i WSTAW...Wybierz * sprawozdań Z OPENROWSET(BULK...).Jednak wstawić wiele wierszy do wyświetlenia podzielonym na partycje przy użyciu WSTAW instrukcja.Aby uzyskać więcej informacji, zobacz Eksportowanie danych z lub luzem importowanie danych do widoku luzem.

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

Inne opcje modyfikowania danych przy użyciu widoku

Jeżeli ograniczenia, opisane wcześniej w tym temacie uniemożliwić modyfikowanie danych bezpośrednio za pomocą widoku, należy rozważyć następujące opcje:

  • Użyj INSTEAD OF wyzwalaczy z logiką, służący do obsługi instrukcji INSERT, UPDATE i DELETE.Aby uzyskać więcej informacji, zobacz Projektowanie zamiast wyzwalaczy.

  • Użyj aktualizowalna widoki podzielonym na partycje, które zmodyfikować jedną lub więcej tabel element członkowski.Aby uzyskać więcej informacji, zobacz Tworzenie widoków podzielonym na partycje.

Aby dodać dane do widoku

Aby zmienić dane, korzystając z widoku

Aby usunąć dane, korzystając z widoku

Zobacz także

Koncepcje