SQL Server 从另一个表插入数据

标签 sql sql-server

在我的数据库中,我有表:

  • 系统权限(权限表)
  • 管理员 (AdminsTable)
  • 管理员权限 (AdminsPrivilegesTable)。

  • 我想在插入新的管理数据后将数据插入到 AdminsPrivilegesTable 我将为此使用触发器,但我需要查询以获取管理员 ID 并从 PrivilegesTable 获取所有权限 ID 并将其插入到 AdminsPrivilegesTable。我使用了这个查询,但不起作用。
    INSERT INTO [AdminsPrivilegesTable]
               ([ID]
               ,[AdminID]
               ,[PrevlgID]
               ,[Status])
         VALUES
               ((SELECT ISNULL(MAX(ID)+1,1) FROM AdminsPrivilegesTable)
               ,(SELECT ID FROM Inserted)
               ,(SELECT ID FROM PrivilegesTable)
               ,0)
    

    最佳答案

    样本数据 对于这个演示:

    CREATE TABLE SYSTEM_PRIVILEGES ([ID] INT IDENTITY NOT NULL,
                                    [NAME] NVARCHAR(50),
                                    [ISDEFAULT] INT)
    INSERT INTO SYSTEM_PRIVILEGES ([NAME], ISDEFAULT) VALUES
    ('READ', 1),
    ('EXECUTE', 0),
    ('WRITE', 0)
    
    CREATE TABLE ADMINS ([ID] INT IDENTITY NOT NULL, [NAME] NVARCHAR(50))
    INSERT INTO ADMINS ([NAME]) VALUES
    ('systemadmin'),
    ('backupadmin'),
    ('ITadmin')
    
    CREATE TABLE AdminsPrivilegesTable ([ID] INT IDENTITY,
                                        [AdminID] INT,
                                        [PrevlgID] INT,
                                        [Status] INT)
    

    现在,您希望在创建新管理员时自动在 AdminsPrivilegesTable 中插入。您正站在 2 个解决方案面前,恕我直言。
  • 询问插入 Admin 行的应用程序(或存储过程,或它所做的任何事情)在另一个表中进行新的插入,可能类似于:

  • 插入语句
    INSERT INTO AdminsPrivilegesTable ([AdminID], [PrevlgID], [Status])
    SELECT ADMINS.[ID],
           PREV.[ID],
           1
    FROM ADMINS,
    SYSTEM_PRIVILEGES PREV
    WHERE NOT EXISTS (SELECT 1
                      FROM AdminsPrivilegesTable T
                      WHERE T.AdminID = ADMINS.ID
                      AND T.PrevlgID = PREV.ID)
    
  • 使用与上述相同的查询触发

  • 就像我在评论中所说的那样,我建议第一个 .

    SQL Fiddle here

    关于SQL Server 从另一个表插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50700234/

    相关文章:

    sql - 添加与固定列值的关系

    sql-server - SQL Server XML 文件更新一个节点的值,其中另一个节点的文本为 XXX

    sql-server - varbinary(max) 数据类型无效

    sql - 从表列获取值并插入到另一个表

    mysql - Hibernate:是否可以在命名查询中同时使用Like和In?

    c# - Entity Framework 的查询执行速度极慢且效率低下

    sql - 使用两个不同的子句计算两列的行数

    sql-server - 如何在 View 上创建聚簇索引

    php - 单个html表单插入到具有一对多关系的多个mysql表中

    java - 使用标准 'OR' 缩小结果集范围