2010-06-27 3 views
4

В SQL Server 2005 у меня есть некоторые представления, созданные с помощью инструкции SELECT. Можем ли мы написать UPDATE и DELETE заявления во мнениях?Можем ли мы писать обновления и удалять запросы в представлениях?

+0

Нет, вы не можете написать DELETE непосредственно в определении VIEW, оно должно быть SELECT. – slugster

ответ

8

Ну, вы можете удалить из представления, если это то, о чем вы просите, но вы не можете иметь представление, которое удаляет информацию. Представление представляет собой часть данных из основных таблиц. Если у вас есть разрешения, вы можете выполнять те же манипуляции с данными в представлениях, которые вы можете сделать непосредственно в таблице.

Таким образом, вы можете сделать что-то вроде:

DELETE FROM my_View WHERE id = 3; 

When to use views
What is a view

+0

поэтому мы не можем писать, как это создать вид MyView , как удалить из эх, где отдела = 10 конца я думаю, что не писать я прав –

+1

@Surya - Нет, вы не можете сделать это. Я не могу представить, почему вы тоже захотите. Для этого вы использовали бы хранимую процедуру. –

+0

ok Я понял, что г-н Кевин –

12

из этой статьи MSDN: Modifying Data Through a View,

  • Любые изменения, в том числе UPDATE, INSERT и DELETE заявления , должны ссылаться на столбцы только из одной базовой таблицы.
  • Столбцы, которые изменяются в представлении, должны напрямую ссылаться на базовые данные в столбцах таблицы. Они не могут быть получены каким-либо иным способом, например, путем:

    • Агрегатная функция (AVG, COUNT, SUM, MIN, MAX, группирование, СТАНДОТКЛОН, СТАНДОТКЛОНП, ВАР и ДИСПР).
    • Расчет; столбец не может быть вычислен из выражения с использованием других столбцов. Колонки, сформированные с использованием операторов набора (UNION, UNION ALL, CROSSJOIN, EXCEPT и INTERSECT), составляют вычисление и также не могут обновляться.
  • Изменчивые столбцы не могут быть затронуты предложениями GROUP BY, HAVING или DISTINCT.

  • TOP не может быть использован нигде в select_statement представления, когда также указывается опция CHECK OPTION.

и посмотреть статью для оставшегося ...

+0

Благодарим вас за ссылку srinivas –

+1

@Srini - не просто сказать * «см. Эту статью» * - по крайней мере, нарисуйте краткое описание, особенно если вы хотите, чтобы люди повышали ваш ответ. – slugster

+0

@ slugster- спасибо, на самом деле я должен пройти FAQ по SO.Я делаю это сейчас. :) –

1

В дополнении к ограниченному обновлению позволило на самом зрении, вы можете использовать INSTEAD OF триггер для выполнения гораздо более сложных изменений. INSTEAD OF в основном позволяет перехватывать обновление или удалять и выполнять практически любые изменения. Ссылки: MSDN Article.

3

Что делать, если следующий

Create view table1_View 
as 
    select * 
    from table1 

go 

delete 
from table1_view 

я проверил и эта команда удалит все данные из table1

+1

Потому что это происходит только из ОДНА базовая таблица. В соответствии с MSDN вы можете вставлять, обновлять и удалять в представлении, если он получен из одной таблицы. – Arbaaz

0

Ответ лежит на, если представление является обновляемым VIEW или NON обновляемых VIEW.

Обновляемый вид - это представление, которое содержит все столбцы, отличные от нуля, из базовой таблицы.

Если это так, ur update, delete и insert query в представлении влияет на данные в базовой таблице.

Thats it .....

0

Использование представлений для обновления данных Представление может использоваться в запросе, который обновляет данные, с учетом нескольких ограничений. Имейте в виду, что представление не является таблицей и не содержит данных - фактическая модификация всегда выполняется на уровне таблицы. Представления не могут использоваться в качестве механизма для переопределения любых ограничений, правил или ссылочной целостности, определенных в базовых таблицах.

Ограничение на обновление данных через представление Вы можете вставить, обновлять и удалять строки в представлении, с учетом следующих ограничений:

Если представление содержит соединение между несколькими таблицами, вы можете только вставить и обновляете таблицу в представлении, и вы не можете удалить строки.

Вы не можете напрямую изменять данные во взглядах на основе запросов union. Вы не можете изменять данные в представлениях, которые используют операторы GROUP BY или DISTINCT.

Все изменяемые столбцы подвергаются тем же ограничениям, что и операторы, выполняемые непосредственно в базовой таблице.

Невозможно изменить столбцы текста и изображения с помощью представлений.

Нет проверки критериев просмотра. Например, если в представлении выбраны все клиенты, которые живут в Париже, и данные изменены для добавления или редактирования строки, которая не имеет City = 'Paris', данные будут изменены в базовой таблице, но не показаны в представлении , если параметр WITH CHECK OPTION не используется при определении представления. Для получения дополнительной информации Проверьте Article

1

Больше объяснения на Шринивас ответ на точке ..

Любых модификации, включая UPDATE, INSERT и DELETE заявления, должен ссылаться на столбцы только из одной базовой таблицы.

Существует обходное решение для этого с помощью триггеров INSTEAD OF, если вы можете управлять структурой базовой таблицы. Триггеры INSTEAD OF позволяют вам переопределить операцию INSERT, UPDATE или DELETE в представлении. Например, вы можете определить триггер INSTEAD OF INSERT в представлении, чтобы заменить стандартный оператор INSERT.

Предположим, вы создали ниже вид:

CREATE VIEW AuthorsNames 

AS 

SELECT au_id, au_fname, au_lname 

FROM authors 

Вы можете захотеть вставить данные в столбцы не видны в представлении. Для этого создайте триггер INSTEAD OF для просмотра вставок.

CREATE TRIGGER ShowInsert on AuthorsNames 

INSTEAD OF INSERT 

AS 

BEGIN 

INSERT INTO authors 

    SELECT address, au_fname, au_id, au_lname, city, contract, phone, state, zip 

    FROM inserted 

END 

Используя этот метод, вы можете вставлять его в несколько таблиц, но это становится более сложным, если вы имеете дело со множеством базовых таблиц. Ref MSDN

Смежные вопросы