四 (4) 个子查询

Four (4) Sub Queries

有没有什么方法可以做这种子查询:

DELETE (INSERT (SELECT (INSERT)))

我知道如何:INSERT (SELECT):

INSERT INTO r (u_id,role) 
    VALUES ((SELECT u_id FROM USER WHERE email="mumair1992@gmail.com"),'Agent');

我的问题是:
用户在验证帐户时出现在请求 table 中,系统必须:

  1. 在用户table中创建用户
  2. 在角色table中创建用户角色
  3. 从请求中删除用户table

您可以执行 INSERT INTO .... SELECT ... 的原因是 SELECT 被用作 INSERT 查询的输入。

但是,INSERT 查询不会 return 那样做。你最好只写 3 个不同的查询,如下所示:

--Create user in user table
INSERT INTO UserTable VALUES (...)

--Create user role in role table
INSERT INTO UserRoles VALUES (...)

--Delete user from request table
DELETE FROM Requests WHERE ...

您甚至可以将所有这些都包装在一个事务中,以确保所有或 none 个查询 运行:

BEGIN TRAN

--Create user in user table
INSERT INTO UserTable VALUES (...)

--Create user role in role table
INSERT INTO UserRoles VALUES (...)

--Delete user from request table
DELETE FROM Requests WHERE ...

COMMIT

我还怀疑您想要使用您创建的用户的 ID。为此,假设您的 UserTable 有一个 IDENTITY 列,您可以使用 SCOPE_IDENTITY 函数:

BEGIN TRAN

--Create user in user table
INSERT INTO UserTable VALUES (...)

DECLARE @UserID INT
SET @UserID = SCOPE_IDENTITY()

--Create user role in role table
INSERT INTO UserRoles (UserID, RoleID) VALUES (@UserID, ...)

--Delete user from request table
DELETE FROM Requests WHERE ...

COMMIT