В SQL Server 2005 у меня есть некоторые представления, созданные с помощью инструкции SELECT
. Можем ли мы написать UPDATE
и DELETE
заявления во мнениях?Можем ли мы писать обновления и удалять запросы в представлениях?
ответ
Ну, вы можете удалить из представления, если это то, о чем вы просите, но вы не можете иметь представление, которое удаляет информацию. Представление представляет собой часть данных из основных таблиц. Если у вас есть разрешения, вы можете выполнять те же манипуляции с данными в представлениях, которые вы можете сделать непосредственно в таблице.
Таким образом, вы можете сделать что-то вроде:
DELETE FROM my_View WHERE id = 3;
поэтому мы не можем писать, как это создать вид MyView , как удалить из эх, где отдела = 10 конца я думаю, что не писать я прав –
@Surya - Нет, вы не можете сделать это. Я не могу представить, почему вы тоже захотите. Для этого вы использовали бы хранимую процедуру. –
ok Я понял, что г-н Кевин –
из этой статьи 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.
и посмотреть статью для оставшегося ...
Благодарим вас за ссылку srinivas –
@Srini - не просто сказать * «см. Эту статью» * - по крайней мере, нарисуйте краткое описание, особенно если вы хотите, чтобы люди повышали ваш ответ. – slugster
@ slugster- спасибо, на самом деле я должен пройти FAQ по SO.Я делаю это сейчас. :) –
В дополнении к ограниченному обновлению позволило на самом зрении, вы можете использовать INSTEAD OF
триггер для выполнения гораздо более сложных изменений. INSTEAD OF
в основном позволяет перехватывать обновление или удалять и выполнять практически любые изменения. Ссылки: MSDN Article.
Что делать, если следующий
Create view table1_View
as
select *
from table1
go
delete
from table1_view
я проверил и эта команда удалит все данные из table1
Потому что это происходит только из ОДНА базовая таблица. В соответствии с MSDN вы можете вставлять, обновлять и удалять в представлении, если он получен из одной таблицы. – Arbaaz
Ответ лежит на, если представление является обновляемым VIEW или NON обновляемых VIEW.
Обновляемый вид - это представление, которое содержит все столбцы, отличные от нуля, из базовой таблицы.
Если это так, ur update, delete и insert query в представлении влияет на данные в базовой таблице.
Thats it .....
Использование представлений для обновления данных Представление может использоваться в запросе, который обновляет данные, с учетом нескольких ограничений. Имейте в виду, что представление не является таблицей и не содержит данных - фактическая модификация всегда выполняется на уровне таблицы. Представления не могут использоваться в качестве механизма для переопределения любых ограничений, правил или ссылочной целостности, определенных в базовых таблицах.
Ограничение на обновление данных через представление Вы можете вставить, обновлять и удалять строки в представлении, с учетом следующих ограничений:
Если представление содержит соединение между несколькими таблицами, вы можете только вставить и обновляете таблицу в представлении, и вы не можете удалить строки.
Вы не можете напрямую изменять данные во взглядах на основе запросов union. Вы не можете изменять данные в представлениях, которые используют операторы GROUP BY или DISTINCT.
Все изменяемые столбцы подвергаются тем же ограничениям, что и операторы, выполняемые непосредственно в базовой таблице.
Невозможно изменить столбцы текста и изображения с помощью представлений.
Нет проверки критериев просмотра. Например, если в представлении выбраны все клиенты, которые живут в Париже, и данные изменены для добавления или редактирования строки, которая не имеет City = 'Paris', данные будут изменены в базовой таблице, но не показаны в представлении , если параметр WITH CHECK OPTION не используется при определении представления. Для получения дополнительной информации Проверьте Article
Больше объяснения на Шринивас ответ на точке ..
Любых модификации, включая 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
- 1. Можем ли мы писать условные болты в шторме?
- 2. Можем ли мы писать петли/условия/блок кода в отсрочке?
- 3. Можем ли мы писать текст вертикально в текстовом виде
- 4. Можем ли мы писать хранимые процедуры в SQLite на iPhone?
- 5. Почему мы не можем писать частичные функции?
- 6. Можем ли мы обнаружить события обновления браузера и кнопки «Назад»?
- 7. Можем ли мы писать NNTP-сервер, используя C#
- 8. Можем ли мы писать onClickListner по невидимому TextView - Android?
- 9. Можем ли мы удалять сохраненный пароль программно из firefox?
- 10. в netty, мы можем писать и получать только данные менее 1024 байта: как мы можем писать или получать больше?
- 11. Можем ли мы запускать запросы из пользовательского UDF в Hive?
- 12. Можем ли мы добавлять имена переменных в запросы mysql?
- 13. Как мы можем безопасно создавать и удалять файл?
- 14. Можем ли мы писать расширения для кода Visual Studio?
- 15. Можем ли мы выполнить SQL-запросы в JQuery
- 16. Как мы можем отслеживать запросы mongoDB?
- 17. Можем ли мы выполнять параллельные запросы EF LINQ?
- 18. Можем ли мы создавать обновления CLLocation в фоновом потоке?
- 19. Можем ли мы обрабатывать исключение при выполнении обновления в Oracle
- 20. Можем ли мы упростить этот запрос MySQL?
- 21. Можем ли мы сделать коррелирующие запросы с SQLAlchemy
- 22. Можем ли мы использовать «запросы» для не-игровых приложений?
- 23. Можем ли мы использовать layout_scrollFlags в других представлениях, кроме панели инструментов и AppbarLayout
- 24. Как мы можем писать на принтер в GAE?
- 25. мы можем использовать медиа-запросы и JQM вместе?
- 26. Запросы обновления Redux и одновременного обновления токена
- 27. Можем ли мы использовать разные сертификаты для обновления Blackberry Application?
- 28. Как мы можем писать для синтаксиса цикла в swift 3.0
- 29. Почему мы не можем писать Console.Writeline() в инструкции if?
- 30. Как мы можем писать в файле через код j2me?
Нет, вы не можете написать DELETE непосредственно в определении VIEW, оно должно быть SELECT. – slugster