Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Usuń SCHEMABINDING z widoku w SQL Server

Celem schematu wiążącego widok jest zapewnienie, że tabele podstawowe, do których odwołuje się widok, nie mogą być modyfikowane w sposób, który miałby wpływ na definicję widoku.

To zwykle dobra rzecz. W końcu nie chcesz, żeby ktoś przyszedł i upuścił stół, od którego zależy Twój pogląd, prawda?

Ale co, jeśli musisz wprowadzić zmiany w jednej lub kilku tabelach, do których odwołuje się Twój widok?

W takim przypadku możesz usunąć powiązanie schematu z widoku, wprowadzić zmiany w tabelach bazowych, a następnie ponownie zastosować powiązanie schematu.

Istnieją dwa sposoby na usunięcie powiązania schematu z widoku:

  • Zmień widok, aby jego definicja nie określała już powiązania schematu.
  • Upuść widok (a następnie utwórz go ponownie bez wiązania schematu, jeśli jest to wymagane).

Przykład widoku związanego ze schematem

Oto przykład widoku powiązanego ze schematem:

CREATE VIEW dbo.v_Cats
WITH SCHEMABINDING
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

Wiemy, że jest to widok powiązany ze schematem, ponieważ zawiera WITH SCHEMABINDING w swojej definicji. Aby usunąć powiązanie schematu, wszystko, co musimy zrobić, to usunąć ten bit.

Opcja 1 – Zmień widok

Aby usunąć powiązanie schematu z tego widoku, zmieniając je, możemy użyć następującego kodu:

ALTER VIEW dbo.v_Cats
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

Zmieniliśmy tylko CREATE na ALTER i usuń WITH SCHEMABINDING .

Opcja 2 – Porzuć widok

Oto przykład upuszczania widoku, a następnie ponownego tworzenia go bez wiązania schematu:

DROP VIEW IF EXISTS dbo.v_Cats;
GO

CREATE VIEW dbo.v_Cats
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

W tym przypadku użyłem składni DROP IF EXISTS, która zapobiega wystąpieniu błędu w przypadku, gdy widok nie istnieje.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sprawdź, czy tabela ma klucz obcy w SQL Server za pomocą OBJECTPROPERTY()

  2. Rozwiązywanie problemów z wąskimi gardłami we/wy dysku

  3. Muszę przekazać nazwy kolumn za pomocą zmiennej w instrukcji select w procedurze sklepu, ale nie mogę użyć dynamicznego zapytania

  4. Potrzebujesz pomocy w obliczeniach przy użyciu dwóch zestawów danych przy użyciu Expression SSRS

  5. Eliminowanie zduplikowanych wartości na podstawie tylko jednej kolumny tabeli