开发者社区> 问答> 正文

尝试将值插入sql时如何避免以下错误?

我正在尝试在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'失败,因为它包含派生字段或常量字段。

展开
收起
祖安文状元 2020-01-04 15:56:15 419 0
1 条回答
写回答
取消 提交回答
  • 你问的有点混乱。您提到您有两个表: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'失败,因为它包含派生字段或常量字段。

    希望可以帮助您找到问题所在。

    2020-01-04 15:56:45
    赞同 展开评论 打赏
问答分类:
SQL
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载