在我的数据库中,我有表:
我想在插入新的管理数据后将数据插入到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)发布于 2018-06-05 13:33:39
本演示的示例数据:
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中的插入。你站在两个解决方案的前面,伊霍。
插入语句
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在这里
发布于 2018-06-05 13:11:29
您需要在触发器中为多行写入查询,因为Inserted是一个可以容纳多行的表。
在您的示例代码中,不清楚如何获得一些值,因此我将在这里给出一个伪代码示例。
INSERT INTO AdminsPrivilegesTable (
ID, AdminID, PrevlgID, Status)
SELECT ((SELECT ISNULL(MAX(apt.ID)+1,1) FROM AdminsPrivilegesTable apt) -- BAD IDEA
,i.ID
,(SELECT pt.ID FROM PrivilegesTable pt) -- not clear in your example how to do this
,0
FROM inserted i为了获得更好的答案,我需要更多关于您的表模式和一些示例数据的信息。
https://stackoverflow.com/questions/50700234
复制相似问题