使用存储过程选择最后一项值

时间:2013-05-02 09:47:39

标签: sql sql-server

我试图通过使用存储过程从我的数据库中选择最后一个记录值,为此我将@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

3 个答案:

答案 0 :(得分:1)

SCOPE_IDENTITY()意味着在insert之后使用。它不适用于不同的会话。

要检索最新条目,请尝试top 1

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

答案 1 :(得分:1)

您需要使用IDENT_CURRENT('tablename')。

请参阅以下链接,说明@@ IDENTITY,SCOPE_IDENTITY()和IDENT_CURRENT('tablename')之间的区别。

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-retrieve-last-inserted-identity-of-record/

希望这会对你有所帮助。

答案 2 :(得分:0)

我假设您的表中有一些主键(PK)。编写程序,在该程序中触发查询

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

这样您就可以从DB获取最新记录。通过打开光标,您可以在程序中使用记录。