是否有任何可能的方式做這樣的子查詢:四(4)子查詢
DELETE (INSERT (SELECT (INSERT)))
我懂得:
INSERT INTO r (u_id,role)
VALUES ((SELECT u_id FROM USER WHERE email="[email protected]"),'Agent');
我的問題是::INSERT (SELECT)
用戶出現在請求表中時,他驗證其帳戶時,系統必須:
- 創建用戶in用戶表
- 從請求表
是否有任何可能的方式做這樣的子查詢:四(4)子查詢
DELETE (INSERT (SELECT (INSERT)))
我懂得:
INSERT INTO r (u_id,role)
VALUES ((SELECT u_id FROM USER WHERE email="[email protected]"),'Agent');
我的問題是::INSERT (SELECT)
用戶出現在請求表中時,他驗證其帳戶時,系統必須:
你可以做INSERT INTO .... SELECT ...
是,SELECT
被用作輸入到INSERT
查詢原因
但是,INSERT
查詢不會以這種方式返回任何內容。你好得多隻寫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 ...
你甚至可以包所有的交易,以確保所有或沒有查詢的運行:
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
@ user3316447關於你對此建議的編輯答案,我會接受'BEGIN TRAN'被重寫爲'BEGIN TRANSACTION'(儘管我更喜歡較短的一個,因爲它更容易輸入),但是每行末尾的分號在SQL Server中並不需要。 – DavidG
爲什麼你不能只是做3個查詢?它肯定會比所有這些子查詢更具可讀性(即使這可能) – DavidG
爲什麼不使用存儲過程作爲接口?然後你可以做所有的檢查,插入/刪除和處理錯誤。 – jpw
謝謝先生。@ DavidG我已經在做這3個查詢 謝謝先生。@ jpw虐待下一次記住程序...我正在做我的最終項目剛開始學習 – Umair