Обновление: у меня проблема не с сервером SQL. Я выполнил оператор обновления внутри базы данных вручную для представления и смог обновить таблицу Bar. Я закрою это и более подробно изучу адаптеры OleDbDataAdapters, поскольку думаю, что проблема в них.
Этот вопрос относится к MS SQL Server 2000. Как определить, какую таблицу в множественном представлении можно изменить?
У меня есть следующий вид:
CREATE VIEW dbo.MyView
AS
SELECT dbo.Foo.Id, dbo.Bar.Id, dbo.Foo.column1, dbo.Foo.column2,
dbo.Foo.column3, dbo.Bar.column1, dbo.Bar.column2,
dbo.Bar.column3
FROM dbo.Bar INNER JOIN
dbo.Foo ON dbo.Bar.Id = dbo.Foo.ForeignId
Когда я обновляю это представление (используя VB.NET OleDbDataAdapters), я могу обновить столбцы Foo, но не столбцы Bar. Мои исследования показали, что в таком множественном представлении сервер MS SQL позволяет обновлять только одну из таблиц. Итак, мой вопрос: как SQL-сервер определяет, какую таблицу можно обновить?
Я попытался проверить, где я редактирую поля определенной строки в представлении. После этого я использовал OleDbDataAdapter для обновления представления. Только изменения в таблице Foo были приняты. Изменения в таблице Бар были проигнорированы (исключений не было).
Есть ли способ предсказать, какая из таблиц может быть обновлена или способ контролировать, какая из них? Что, если бы я хотел, чтобы Bar была обновляемой таблицей вместо Foo?
Обновление: я нашел это в Google, MS SQL Server 2000 Unleased:
http://books.google.com/books?id=G2YqBS9CQ0AC&pg=RA1-PA713&lpg=RA1-PA713&dq=ms+sql+server+"multitable+view"++updated&source=bl&ots=ZuQXIlEPbO&sig=JbgdDe5yU73aSkxh-SLDdtMYZDs&hl=en&ei=b-0SSq-aHZOitgPB38zgDQ&sa=X&oi=book_result&ct=result&resnum=1#PRA1-PA713,M1
(Почему-то URL, который я пытаюсь вставить, не работает с этим сайтом, извините, что вам нужно скопировать и вставить.)
Что говорит:
- Обновление через множественное представление не может затрагивать более чем одну базовую базовую таблицу.
- Удаление не может быть выполнено для множественных представлений.
Но я пока не вижу ответа на свой вопрос.
Опять же, мой вопрос:
Как определить, какую таблицу в множественном представлении можно изменить?
Я понимаю, что могу написать два оператора обновления по одному для каждой таблицы. Мое беспокойство другое. Мне нужно проверить код, который использует представления, подобные приведенному выше, и обновляет представления. Я надеялся найти способ определить, какие части обновлений будут игнорироваться.
* +1054 * Пример:
Я редактирую Bar.Column1, а затем вызываю метод Update () в OleDbDataAdapter. Это приводит к тому, что таблица столбцов не изменяется и не генерируется исключение. Если я редактирую Foo.Column2, то вызываю Update (), таблица Foo модифицируется.