关键字“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”附近的语法不正确的主要内容,如果未能解决你的问题,请参考以下文章

错误“关键字 'CONVERT' 附近的语法不正确”

关键字“或”附近的语法不正确

在关键字“pivot”附近出现语法错误,提示语法不正确。我在这里想念啥

SQL错误关键字'user'附近的语法不正确[重复]

关键字 UNION 附近的语法不正确

关键字“JOIN”附近的语法不正确。使用 asp.net [重复]