将数据插入视图(SQL Server)

Kee*_*eks 18 sql-server-2008

我有以下设置:

CREATE TABLE dbo.Licenses
(
 Id    int IDENTITY(1,1) PRIMARY KEY,
 Name  varchar(100),
 RUser nvarchar(128) DEFAULT USER_NAME()
)

GO

CREATE VIEW dbo.rLicenses
AS
SELECT Name
FROM   dbo.Licenses
WHERE  RUser = USER_NAME()

GO
Run Code Online (Sandbox Code Playgroud)

当我尝试使用视图插入数据时...

INSERT INTO dbo.rLicenses VALUES ('test')
Run Code Online (Sandbox Code Playgroud)

出现错误:

Cannot insert the value NULL into column Id, table master.dbo.Licenses; column does not allow nulls. INSERT fails.
Run Code Online (Sandbox Code Playgroud)

为什么在尝试使用视图插入时身份列的自动增量不起作用,我该如何解决?

场景是:

数据库的不同用户应该只能在该表中使用自己的行.因此,我试图通过检查用户名将视图用作一种安全性.有没有更好的解决方案?

gbn*_*gbn 16

命名你的专栏怎么样?

INSERT INTO dbo.rLicenses (name) VALUES ('test')
Run Code Online (Sandbox Code Playgroud)

自从我尝试通过视图进行更新已经多年了,所以YMMV就像HLGEM所提到的那样.

我会考虑视图上的"INSTEAD OF"触发器,以允许触发器中的简单INSERT dbo.Licenses(即表格)


Ran*_*der 0

您的兼容性级别设置为多少?如果是 90,则说明它按设计工作。请参阅这篇文章

无论如何,为什么不直接插入到表中呢?