2015-08-26 75 views
0

为什么我在关键字'read'附近得到错误的语法错误?关键字'read'附近的语法错误

create view viewJab 
as 
    select kojab,nmjabatan 
    from jabatan 
    with read only; 

错误:

Msg 156, Level 15, State 1, Procedure viewJab, Line 5
Incorrect syntax near the keyword 'read'.

+0

,因为这是不允许的:https://msdn.microsoft.com/en-us/library/ms187956.aspx如果你想创建一个只读视图,也有做的多种方法那。 Google是你的朋友。 http://stackoverflow.com/questions/7805760/creating-readonly-views-in-sql-server –

+0

这篇文章可能也是你感兴趣的:[在SQL Server中创建只读视图](http:// stackoverflow .com/questions/7805760/created-readonly-views-in-sql-server) - 对不起,我只注意到David Brabant已经提到过这篇文章。 ;-) – cars10m

回答

0
create view viewJab 
with SCHEMABINDING 
as select kojab,nmjabatan 
from dbo.jabatan 

DENY UPDATE ON dbo.viewjab TO username 
+0

你可以多加一些信息,说明为什么这样可以解决问题吗? – Trisha

+0

好问题!实际上,'With schemabinding'子句可以防止底层表(在这种情况下为jabatan)以这种方式被改变,因为这会影响视图!这是另一回事,并没有真正回答这个问题。同样在例如我在上面给出了该视图从中选择的表格,需要将它的模式(即dbo)合并为dbo.jabatan。我编辑了示例以显示此内容,并添加了“只读”的“权限方式”,只要您知道要拒绝更新功能的所有人的用户名即可。 – russ

+0

@russ你应该编辑你的答案,而不是张贴必要的部分作为评论。 – Wtower

0

使用INSTEAD OF触发:

CREATE VIEW:

create view viewJab as 
select kojab,nmjabatan 
from jabatan; 

TRIGGER:

CREATE TRIGGER dbo.ViewJab_Trigger_OnInsertOrUpdateOrDelete] 
ON dbo.viewJab 
INSTEAD OF INSERT, UPDATE, DELETE 
AS 
BEGIN 
     RAISERROR ('You are not allow to update this view!', 16, 1)  
END 
相关问题