Любое представление можно сделать обновляемым с помощью триггера INSTEAD OF.
http://msdn.microsoft.com/en-us/library/ms187956.aspx
В вашем случае SQL Server не может автоматически сделать его обновляемым, но вы можете сопоставить столбцы со строками в вашем триггере.
Посмотрите на эти страницы:
http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=120679
Сводная таблица SQL доступна только для чтения, и ячейки нельзя редактировать?
Из этого можно сделать вид:
DECLARE @Products TABLE (ID INT, Name VARCHAR(50));
DECLARE @Categories AS TABLE (ID INT, Name VARCHAR(50));
DECLARE @ProductCategoryMatrix AS TABLE (ProductID INT, CategoryID INT);
INSERT INTO @Products (ID, Name) VALUES (1, 'Pen'), (2, 'Pad'), (3, 'Ball');
INSERT INTO @Categories VALUES (1, 'Office'), (2, 'Home'), (3, 'Work');
INSERT INTO @ProductCategoryMatrix VALUES (1, 1), (1, 2), (2, 1), (2, 2), (2, 3), (3, 3);
-- CREATE VIEW AS -- (change variables to real tables)
WITH CategoriesOrdered AS (
SELECT p.ID AS ProductID
,'Cat' + CAST(ROW_NUMBER() OVER(PARTITION BY pc.ProductID ORDER BY pc.CategoryID) AS VARCHAR(1)) AS CategoryColumn
,pc.CategoryID
FROM @Products p
INNER JOIN @ProductCategoryMatrix pc
ON pc.ProductID = p.ID
)
,CategoriesFlat AS (
SELECT *
FROM CategoriesOrdered
PIVOT (MIN(CategoryID) FOR CategoryColumn IN ([Cat1], [Cat2], [Cat3], [Cat4], [Cat5])) AS pvt
)
,ProductsWithCategories AS (
SELECT *
FROM @Products p
LEFT JOIN CategoriesFlat cf
ON cf.ProductID = p.ID
)
SELECT *
FROM ProductsWithCategories;
Создание триггера для этого потребует довольно много кода, но не очень сложно.