四 (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 中,系统必须:
- 在用户table中创建用户
- 在角色table中创建用户角色
- 从请求中删除用户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
有没有什么方法可以做这种子查询:
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 中,系统必须:
- 在用户table中创建用户
- 在角色table中创建用户角色
- 从请求中删除用户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