Оператор DML в представлениях SQL - PullRequest
0 голосов
/ 27 сентября 2011

Я пытаюсь создать представление в этом представлении. Я хочу вставить запись или обновить запись в зависимости от состояния перикуляра, чтобы мы могли вставлять или обновлять его в представлении SQL. Можем ли мы иметь в виду вставку или обновление заявления?

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Краткий ответ: Да. Но есть ограничения.

Например: (взято из http://msdn.microsoft.com/en-us/library/ms180800(v=sql.90).aspx)

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

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

  1. Агрегирующая функция (AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR и VARP). 2. Расчет; столбец не может быть вычислен из выражения с использованием других столбцов. Столбцы, сформированные с помощью операторов множеств (UNION, UNION ALL, CROSSJOIN, EXCEPT и INTERSECT), составляют вычисление и также не могут быть обновлены.

На изменяемые столбцы не могут влиять предложения GROUP BY, HAVING или DISTINCT.

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

Оооочень ... Если это относительно прямолинейное insert или update, которое вы пытаетесь достичь, то это очень возможно - но чем сложнее запрос (и представление ), тем сложнее становится.

Я бы также предложил несколько советов против этого, если вы можете - на мой взгляд, это добавляет ненужный слой усложнения и (как человеку, который должен был разгадать другие запросы, использующие этот процесс), это настоящая боль в поддержании .

0 голосов
/ 27 сентября 2011

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

CREATE VIEW [ schema_name . ] view_name [ (column [ ,...n ] ) ] 
[ WITH <view_attribute> [ ,...n ] ] 
AS select_statement 
[ WITH CHECK OPTION ] [ ; ]

Он обеспечивает, что определение должно быть SELECT оператором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...