sql >> Database >  >> RDS >> Sqlserver

SCHEMABINDING verwijderen uit een weergave in SQL Server

Het doel van schemabinding aan een weergave is om ervoor te zorgen dat de basistabellen waarnaar in de weergave wordt verwezen niet kunnen worden gewijzigd op een manier die de weergavedefinitie zou beïnvloeden.

Dit is normaal gesproken een goede zaak. U wilt tenslotte niet dat iemand langskomt en een tafel laat vallen waarvan uw mening afhangt, toch?

Maar wat als u wijzigingen moet aanbrengen in een of meer tabellen waarnaar in uw weergave wordt verwezen?

In dit geval kunt u schemabinding uit een weergave verwijderen, de wijzigingen aanbrengen in de basistabel(len) en vervolgens schemabinding opnieuw toepassen.

Er zijn twee manieren om schemabinding uit een weergave te verwijderen:

  • Wijzig de weergave zodat de definitie niet langer schemabinding specificeert.
  • Sla de weergave neer (maak deze indien nodig opnieuw zonder schemabinding).

Voorbeeld van een schemagebonden weergave

Hier is eerst een voorbeeld van een schemagebonden weergave:

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

We weten dat het een schemagebonden weergave is omdat het WITH SCHEMABINDING . bevat in zijn definitie. Om schemabinding te verwijderen, hoeven we alleen dat bit te verwijderen.

Optie 1 – Verander de weergave

Om schemabinding uit deze weergave te verwijderen door deze te wijzigen, kunnen we de volgende code gebruiken:

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

Het enige wat we deden was CREATE veranderen naar ALTER , en verwijder WITH SCHEMABINDING .

Optie 2 – De weergave laten vallen

Hier is een voorbeeld van het verwijderen van de weergave en deze vervolgens opnieuw te maken zonder schemabinding:

DROP VIEW IF EXISTS dbo.v_Cats;
GO

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

In dit geval heb ik de DROP IF EXISTS-syntaxis gebruikt, die voorkomt dat er een fout optreedt als de weergave niet bestaat.


  1. Now() zonder tijdzone

  2. Hoe maak je een PL/SQL-functie in Oracle Database?

  3. Hoe de Meridiem Indicator (AM/PM) toe te voegen aan een tijdwaarde in Oracle

  4. Krijg n gegroepeerde categorieën en tel anderen op tot één