2013-12-17 4 views
0

Я создал представление, используя 2 колонки из моей Employee таблицы, как этогоSQL Server - получено дата столбец

Create VIEW [dbo].[vwTestEmp] AS 
    select 
     EMpID, 
     case when (Address1 IS null) then null 
      when (Address1 IS not null) then Address1 
     end as "EMpAddress", 
     '' as "Date_Verified" 
    FROM Employee; 

Теперь Date_Verified не в Employee таблицы, так производный столбец в представлении и содержит ноль. После ручной проверки некоторых процессов, я хочу назвать

update [dbo].[vwTestEmp] 
set Date_verified = GETDATE() 
where EMpid = 60; 

Я получаю сообщение об ошибке

Update или вставки зрения или функции «vwTestEMp» не удалось, поскольку он содержит производный или постоянное поле.

Как справиться с этой ошибкой?

БЛАГОДАРЯ MR

+1

Вы знаете, что неиндексированный вид фактически не хранит данные, не так ли? Итак, что будет делать ваш оператор обновления? –

+0

Эта дата, вероятно, будет изучена, когда будут сделаны обновления и какие-либо расхождения в таблице, мы можем узнать, используя дату. – user2726975

+0

Я не думаю, что вы вполне понимаете, что такое взгляд. ** Он не хранит данные. ** –

ответ

0

У вас есть ошибка. Правильный синтаксис:

UPDATE <view_name> SET<column1>=<value1>,<column2>=<value2>,... WHERE <condition>; 
+0

извините, что это была опечатка..и отредактировал его – user2726975

+0

Тогда я не знаю. Возможно, эта [ссылка] (http://www.sqlservercentral.com/blogs/sqldbauk/2011/08/03/updating-views/) может вам помочь. – Sergi

2

Вы не можете обновить представление через постоянное значение Date_Verified. Изменить запрос:

CREATE VIEW [dbo].[vwTestEmp1] AS 
    SELECT EMpID, Address1 AS EMpAddress], [Date_Verified] 
     FROM EMployee; 

Это позволяет избежать ненужного СЛУЧАЯ и заменяет постоянное значение для столбца даты с соответствующим столбцом.

Это обновление, как показано на странице SqlFiddle.

+0

** 'Date_Verified не входит в таблицу EMployee' ** –

+0

Правильно, но если он должен быть обновляемым, он должен быть в некоторой таблице. Если нет, весь вопрос спорный. В этом случае я с радостью удалю свой ответ. – Pekka

+0

Вот почему я добавил свой комментарий выше. –

0

Используйте таблицу.

select 
    EMpID, 
    Address1 as "EMpAddress", 
    '' as "Date_Verified" 
INTO [dbo].[tblTestEmp] 
FROM Employee; 

update [dbo].[tblTestEmp] 
set Date_verified = GETDATE() 
where EMpid = 60; 
+0

Спасибо! Вот что я сделал – user2726975

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