您有幾個選擇。
1)從臨時表使用臨時表,並首先選擇數據有,更新mod_employmentAppJobs,並進行選擇來獲得檢索到的數據。
因此,它看起來像這樣。
創建臨時表
CREATE TABLE #tmpTABLE
(
EmailAddress varchar(100),
JobTitle varchar(50),
JobTitleId bigint
......
)
插入它
INSERT INTO #tmpTable
SELECT EmailAddress,JobTitle, ........
FROM pro_Profile p
INNER JOIN pro_Email e
ON p.profileID = e.profileID
INNER JOIN mod_userStatus m
ON p.profileID = m.profileID
<!--- Joins the pro staff profiles to the employment app --->
INNER JOIN mod_employmentAppJobTitles a
ON p.profileID = a.departmentID
INNER JOIN mod_employmentAppJobs b
<!--- Join Job titles to the jobs --->
ON a.jobTitleID=b.jobTitleID
<!--- Joining the table on where the profile equals everything else --->
INNER JOIN mod_employmentAppProfile c
ON c.eAppID = b.eAppID
WHERE b.emailSent = 'False'
更新源表(我建議在jobTitleId指數在臨時表的性能,如果適用)
UPDATE mod_employmentAddJobs
SET EmailSent="true"
FROM mod_employmentAppJobs b
INNER JOIN #tmpTable tmp
ON b.jobTitleID=tmp.jobTitleID
獲取的實際數據傳回應用層
SELECT * FROM #tmpTable
爲了更好的味道,我建議與BEGIN TRAN灑... ... COMMIT ROLLBACK並開始TRY..END TRY BEGIN CATCH ... END CATCH品嚐和業務需求。
此外,這是禮貌下降臨時表,你用它做之後,即使你沒有SQL服務器將不會見怪。
2)您可以使用update語句的OUTPUT子句。
UPDATE mod_employmentAddJobs
SET EmailSent="true"
FROM pro_Profile p
INNER JOIN pro_Email e
ON p.profileID = e.profileID
INNER JOIN mod_userStatus m
ON p.profileID = m.profileID
<!--- Joins the pro staff profiles to the employment app --->
INNER JOIN mod_employmentAppJobTitles a
ON p.profileID = a.departmentID
INNER JOIN mod_employmentAppJobs b
<!--- Join Job titles to the jobs --->
ON a.jobTitleID=b.jobTitleID
<!--- Joining the table on where the profile equals everything else --->
INNER JOIN mod_employmentAppProfile c
ON c.eAppID = b.eAppID
WHERE b.emailSent = 'False'
插入輸出。*
這應該讓你的結果集馬上回你的應用程序層
如果它是一個位字段,我想你可以設置爲1 (對於真)或0(對於假)。 – Marco 2011-05-02 20:17:17
這也是這筆交易,它需要更新,但它需要在SQL之後返回數據。 – 2011-05-02 20:17:55
如果設置爲false,它會更容易閱讀,並且可以以任何方式工作。 – 2011-05-02 20:18:25