Syftet med att schemabinda en vy är att säkerställa att bastabellerna som refereras till i vyn inte kan ändras på ett sätt som skulle påverka vyns definition.
Detta är normalt en bra sak. När allt kommer omkring, vill du inte att någon kommer och släpper ett bord som din syn beror på, eller hur?
Men vad händer om du behöver göra ändringar i en eller flera tabeller som din vy refererar till?
I det här fallet kan du ta bort schemabindning från en vy, göra ändringarna i bastabellen/-erna och sedan tillämpa schemabindning igen.
Det finns två sätt att ta bort schemabindning från en vy:
- Ändra vyn så att dess definition inte längre anger schemabindning.
- Släpp vyn (återskapa den sedan utan schemabindning om det behövs).
Exempel på en schemabunden vy
Först, här är ett exempel på en schemabunden vy:
CREATE VIEW dbo.v_Cats WITH SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Vi vet att det är en schemabunden vy eftersom den innehåller WITH SCHEMABINDING
i sin definition. För att ta bort schemabindning behöver vi bara ta bort den biten.
Alternativ 1 – Ändra vyn
För att ta bort schemabindning från den här vyn genom att ändra den kan vi använda följande kod:
ALTER VIEW dbo.v_Cats AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Allt vi gjorde var att ändra CREATE
till ALTER
, och ta bort WITH SCHEMABINDING
.
Alternativ 2 – Släpp vyn
Här är ett exempel på att ta bort vyn och sedan återskapa den utan schemabindning:
DROP VIEW IF EXISTS dbo.v_Cats; GO CREATE VIEW dbo.v_Cats AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
I det här fallet använde jag syntaxen DROP IF EXISTS, som förhindrar att ett fel uppstår om vyn inte existerar.