首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Server从其他表插入数据

Server从其他表插入数据
EN

Stack Overflow用户
提问于 2018-06-05 12:35:37
回答 2查看 69关注 0票数 4

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

  • 系统特权(PrivilegesTable)
  • 管理员(AdminsTable)
  • 管理员特权(AdminsPrivilegesTable)。

我想在插入新的管理数据后将数据插入到AdminsPrivilegesTable中,我将为此使用触发器,但我需要查询以获取管理ID,并从PrivilegesTable获取所有特权iD并将其插入AdminsPrivilegesTable。我使用了这个查询,但不起作用。

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-05 13:33:39

本演示的示例数据

代码语言:javascript
复制
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中的插入。你站在两个解决方案的前面,伊霍。

  1. 请插入Admin行的应用程序(或存储过程,或它所做的任何操作)在另一个表中进行新的插入,可能如下所示:

插入语句

代码语言:javascript
复制
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)
  1. 触发器与上面的查询相同。

,就像我在评论中说的,我建议第一个

SQL Fiddle在这里

票数 1
EN

Stack Overflow用户

发布于 2018-06-05 13:11:29

您需要在触发器中为多行写入查询,因为Inserted是一个可以容纳多行的表。

在您的示例代码中,不清楚如何获得一些值,因此我将在这里给出一个伪代码示例。

代码语言:javascript
复制
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

为了获得更好的答案,我需要更多关于您的表模式和一些示例数据的信息。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50700234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档