cru*_*ter 3 t-sql database sql-server sql-view
我正在处理一个视图,然后由用户更新。此更新基本上更改了列的值。但现在它不允许我这样做并产生这个:
Update or insert of view or function '' failed because it contains a derived or constant field.
Run Code Online (Sandbox Code Playgroud)
我知道这是因为我在 select 语句中有一个常量,但是有没有办法绕过它?请帮忙
这是我的视图代码
Create view Schema.View1
as
SELECT
Convert(Varchar(20),l.jtpName) as JobType, Convert(Varchar(10),' <All> ')as SubCategory , Convert(varchar (3), Case when a.jtpName= l.jtpName and a.subName= ' <All> ' then 'Yes' else 'No' end) As AutoProcess from Schema.JobType l left join Schema.Table1 a on l.jtpName=a.jtpName
UNION
SELECT
Convert(Varchar(20),a.jtpName) as JobType, Convert(Varchar(10),a.subName) as SubCategory, Convert(varchar (3),Case when b.jtpName= a.jtpName and b.subName= a.subName then 'Yes' else 'No' end) As AutoProcess from Schema.SubCategory a left join fds.Table1 b on a.subName=b.subName
GO
Run Code Online (Sandbox Code Playgroud)
最后是更新语句:
UPDATE Schema.View1 SET AUTOPROCESS = Case WHEN AUTOPROCESS = 'Yes' Then 'No' END Where JOBTYPE = 'Transport' and SUBCATEGORY= 'Cargo'
Run Code Online (Sandbox Code Playgroud)
谢谢你
您不能更新作为计算结果的列。
根据MSDN,视图列可更新的条件之一是:
这里不仅您的视图使用了UNION语句,AutoProcess您尝试更新的字段实际上CASE是使用两个字段的语句的结果。尝试更新它是没有意义的。
我建议您使用存储过程来执行写入操作。或者,正如 Damien 所建议的,您也可以INSTEAD OF在视图上使用触发器。
| 归档时间: |
|
| 查看次数: |
9637 次 |
| 最近记录: |