在我的数据库中,我有表:
>系统权限(PrivilegesTable)
>管理员(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个解决方案前面,imho.
>询问插入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)
>使用与上面相同的查询触发
就像我在评论中所说,我会建议第一个.