sql >> Databáze >  >> RDS >> Sqlserver

Odebrat SCHEMABINDING ze zobrazení na serveru SQL Server

Účelem vazby schématu na pohled je zajistit, že základní tabulky odkazované v pohledu nelze upravit způsobem, který by ovlivnil definici pohledu.

To je obvykle dobrá věc. Koneckonců nechcete, aby někdo přišel a shodil stůl, na kterém závisí váš pohled, že?

Co když ale potřebujete provést změny v jedné nebo více tabulkách, na které odkazuje váš pohled?

V tomto případě můžete z pohledu odebrat vazbu schématu, provést změny v základní tabulce/tabulkách a poté znovu použít vazbu schématu.

Existují dva způsoby, jak odebrat vazbu schématu z pohledu:

  • Změňte zobrazení tak, aby jeho definice již neurčovala vazbu schématu.
  • Zrušte zobrazení (poté jej v případě potřeby znovu vytvořte bez vazby schématu).

Příklad zobrazení vázaného na schéma

Nejprve je zde příklad zobrazení vázaného na schéma:

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

Víme, že jde o zobrazení vázané na schéma, protože obsahuje WITH SCHEMABINDING ve své definici. Chcete-li odstranit vazbu schématu, vše, co musíme udělat, je odstranit tento bit.

Možnost 1 – Změnit zobrazení

K odstranění vazby schématu z tohoto zobrazení jeho změnou můžeme použít následující kód:

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

Vše, co jsme udělali, bylo změnit CREATE na ALTER a odstraňte WITH SCHEMABINDING .

Možnost 2 – Pusťte zobrazení

Zde je příklad zrušení zobrazení a jeho opětovného vytvoření bez vazby schématu:

DROP VIEW IF EXISTS dbo.v_Cats;
GO

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

V tomto případě jsem použil syntaxi DROP IF EXISTS, která zabraňuje výskytu chyby v případě, že pohled neexistuje.


  1. ORA-04021:Při čekání na uzamčení objektu došlo k vypršení časového limitu

  2. Může pokojová knihovna zkopírovat db ze složky aktiv?

  3. Jak připojit pracovní stůl mysql ke spuštění mysql uvnitř dockeru?

  4. Automaticky aktualizujte materializovaný pohled pomocí pravidla nebo upozornění