我正在尝试在SQL中插入一对多的值。我有两个表:users和userroles。
我正在尝试userroles为每个用户插入多个角色,这些用户已经存在多个角色。我正在使用插入语句,但出现错误(如下所示)。我知道这userid很可能是我的问题,因为它来自users表,但我不知道如何解决该问题...我认为该表会自动插入一个ID(该UserRoles表仅包含3列:ID, UserID和RoleID)
为RoleID给定用户添加两个值的语法:
insert into UserRoles (userid, roleid)
values('9481EFEB-D36B-4381-8E9C-73EBC3BAC12D', '9ccc9a13-5027-48f9-9831-3e15afdb4412')
insert into UserRoles (userid, roleid)
values('9481EFEB-D36B-4381-8E9C-73EBC3BAC12D', 'c12f6b95-7dc7-4fa1-8f91-f3fb7da4c0c3')
错误:
消息4406,级别16,状态1,第1行 更新或插入视图或函数'UserRoles'失败,因为它包含派生字段或常量字段。
你问的有点混乱。您提到您有两个表:users和userroles,但是对userroles的更新清楚地表明了它是一个视图。我怀疑除了这三列之外,您的视图定义中肯定还有其他内容。这是一个例子:
USE tempdb;
GO
CREATE TABLE dbo.UserRoles_table
(
ID int IDENTITY(1,1) PRIMARY KEY,
UserID uniqueidentifier NOT NULL,
RoleID uniqueidentifier NOT NULL
)
GO
CREATE VIEW dbo.UserRoles
AS
SELECT ID, UserID, RoleID
FROM dbo.UserRoles_table;
GO
INSERT dbo.UserRoles (userid, roleid)
VALUES('9481EFEB-D36B-4381-8E9C-73EBC3BAC12D', '9ccc9a13-5027-48f9-9831-3e15afdb4412')
INSERT dbo.UserRoles (userid, roleid)
VALUES('9481EFEB-D36B-4381-8E9C-73EBC3BAC12D', 'c12f6b95-7dc7-4fa1-8f91-f3fb7da4c0c3')
GO
那很好。但是,如果我在视图定义中添加其他类似内容,则可能具有特殊的管理员角色或类似角色:
ALTER VIEW dbo.UserRoles
AS
SELECT ID, UserID, RoleID
FROM dbo.UserRoles_table
UNION ALL
SELECT 1, '9481EFEB-D36B-4381-8E9C-73EBC3BAC13D', 'c12f6b95-7dc7-4fa1-8f91-f3fb7da4c0c4';
GO
现在注意,当我尝试再次插入时:
INSERT dbo.UserRoles (userid, roleid)
VALUES('9481EFEB-D36B-4381-8E9C-73EBC3BAC12D', '9ccc9a13-5027-48f9-9831-3e15afdb4412')
INSERT dbo.UserRoles (userid, roleid)
VALUES('9481EFEB-D36B-4381-8E9C-73EBC3BAC12D', 'c12f6b95-7dc7-4fa1-8f91-f3fb7da4c0c3')
GO
我得到了相同的错误:消息4406,级别16,状态1,第32行更新或插入视图或函数'UserRoles'失败,因为它包含派生字段或常量字段。
希望可以帮助您找到问题所在。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。