关键字“read”附近的语法不正确
Posted
技术标签:
【中文标题】关键字“read”附近的语法不正确【英文标题】:Incorrect syntax near the keyword 'read' 【发布时间】:2015-08-26 03:27:48 【问题描述】:为什么在关键字“read”附近出现不正确的语法错误?
create view viewJab
as
select kojab,nmjabatan
from jabatan
with read only;
错误:
消息 156,级别 15,状态 1,过程 viewJab,第 5 行 。
【问题讨论】:
因为这是不允许的:msdn.microsoft.com/en-us/library/ms187956.aspx 如果你想创建一个只读视图,有多种方法可以做到这一点。谷歌是你的朋友。 ***.com/questions/7805760/… 您可能也会对这篇文章感兴趣:Creating read only views in SQL-Server - 抱歉,刚刚注意到 David Brabant 已经提到了这篇文章。 ;-) 【参考方案1】:使用INSTEAD OF
触发器:
创建视图:
create view viewJab as
select kojab,nmjabatan
from jabatan;
触发:
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
【讨论】:
【参考方案2】:create view viewJab
with SCHEMABINDING
as select kojab,nmjabatan
from dbo.jabatan
DENY UPDATE ON dbo.viewjab TO username
【讨论】:
你能补充一点关于为什么这会解决问题的信息吗? 好问题!事实上,'With schemabinding' 子句可以防止底层表(在本例中为 jabatan)被更改,因为这会影响视图!这是一种相反的方式,根本没有真正回答这个问题。同样在例如我在上面给出了,视图从中选择的表需要合并它的模式(即 dbo),该模式将作为 dbo.jabatan 输入。我已经编辑了示例以显示这一点,并添加了一种“权限方式”来实现只读,只要您知道要拒绝更新功能的每个人的用户名。 @russ 您应该编辑您的答案,而不是发布重要部分作为评论。以上是关于关键字“read”附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章