2013-05-02 32 views
0

我想通過使用存儲過程從我的數據庫中選擇最後一個記錄值,要做到這一點我將@UPID參數設置爲SCORE_IDENTITY(),但沒有輸出結果,因爲我執行後我的存儲過程使用存儲過程來選擇最後一項值

CREATE PROCEDURE [dbo].[spAuditLogSelect_NewUser] 

@UPID int 
AS 
BEGIN 

SET @UPID = SCOPE_IDENTITY() 


SELECT 
siUserProfile.UPID 
,siUserProfile.ProfileType, siProfileType.RGDName AS ProfileTypeName 
,siUserProfile.CBID, siCompany.ComName + ' - ' + siComBranch.ComBranchName AS CBName 
,siUserProfile.FullName 
,siUserProfile.ShortName 
,siUserProfile.SerialCode 
,siUserProfile.Serial 
,siUserProfile.Gender 



from siUserProfile WITH (NOLOCK) 
inner join siUserProfileDetail WITH (NOLOCK) on siUserProfile.upid =    siUserProfileDetail.UPID 
left outer join siReferenceGroupDetail siProfileType WITH (NOLOCK) ON siUserProfile.ProfileType = siProfileType.RGDID 
left outer join siComBranch WITH (NOLOCK) on siComBranch.CBID = siUserProfile.CBID 
left outer join siCompany WITH (NOLOCK) ON siComBranch.CompanyID = siCompany.CompanyID 


where siUserProfile.UPID = @UPID 
+0

你是什麼意思的「沒有輸出結果」? proc返回一個空表或者沒有返回? 如果您不能看到輸出,請按Display Estimation Plan按鈕。該操作可以建議您創建一個最有可能解決您的問題的索引。 – 2013-05-02 11:24:49

回答

1

SCOPE_IDENTITY()意味着insert後立即使用。它不會在不同的會話中工作。

檢索最新的條目,嘗試top 1

select top 1 * 
... 
where siUserProfile.UPID = @UPID 
order by 
     siUserProfile.ID desc 
+0

我的查詢參數@UPID是必須的,所以你有任何想法讓我通過給出最後一個值來執行我的存儲過程嗎? – user2306490 2013-05-02 10:04:08

+0

當然,只要確保在傳入時使用'@ UPID',不要用'scope_identity()'覆蓋它。 – Andomar 2013-05-02 10:22:45

0

我假設你有你的一些表的主鍵(PK)。編寫程序,在該程序中激發查詢

 select * from Your_Table where PK_Column in(select max(PK_Column) from Your_Table) 

這樣,您將能夠從數據庫中獲取最新記錄。通過打開光標,您可以在程序中播放記錄。

+0

非常滿意你的答案,謝謝你的提示=) – user2306490 2013-05-03 02:16:07

+0

兄弟我現在有另一個問題,我不能執行select max作爲我的查詢,因爲如果有200個併發用戶,那麼我可能不會返回我想要的結果! – user2306490 2013-05-03 02:28:01