2014-09-24 84 views
1

它返回null,为什么? IDENT_CURRENT部分,但它与Scope_Identity很好,为什么?为什么Ident_Current返回null,但Scope_Identity呢?

ALTER PROCEDURE [dbo]. [InsertComplaints] 
    @ComplaintCode varchar(50), 
    @ComplaintType_ID smallint, 
    @RecievingMode_ID smallint, 
    @Subject varchar(100), 
    @ComplainantID smallint, 
    @District_ID smallint, 
    @AddressedTo varchar(50), 
    @DiaryNo varchar(50), 
    @User_ID int, 
    @Status_ID smallint, 
    @RecievedDate smalldatetime, 
    @IGRemarks varchar(MAX) = null, 
    @PsoRemarks varchar(MAX) =null, 
    @FinalDecision varchar(250)=null, 
    @AgainstDist_ID smallint, 
    @HomePS_ID smallint, 
    @AgainstPS_ID smallint, 
    @Name varchar(75), 
    @DesigID int, 
    @ForwardedBy smallint, 
    @SMS_ID int = 0, 
    @result bit output, 
    @ID int output 
AS 
BEGIN 
    Begin Try 
     insert into dbo.Complaints 
     values (
     @ComplaintCode, 
     @ComplaintType_ID, 
     @RecievingMode_ID , 
     @Subject, 
     @ComplainantID , 
     @District_ID , 
     @AddressedTo , 
     @DiaryNo, 
     @User_ID, 
     @Status_ID, 
     @RecievedDate, 
     @IGRemarks, 
     @PsoRemarks, 
     @FinalDecision, 
     @AgainstDist_ID, 
     @HomePS_ID, 
     @AgainstPS_ID, 
     @Name , 
     @DesigID, 
     @ForwardedBy, 
     @SMS_ID 
     ) 

     Set @result = @@ROWCOUNT 

     Set @ID = IDENT_CURRENT('ComplaintID') --SCOPE_IDENTITY() 
     Select @ID 
    End Try 
    Begin Catch 
     Set @result=0 
    End Catch 
END 

我想从投诉表中的特定表,使得complaintID最后插入id但它不会,但空返回任何。帮帮我 !

+0

'SELECT @ID = SCOPE_IDENTITY()'是否工作?它应该 - 但你需要使用'SELECT'而不是'SET',我相信... – 2014-09-24 08:03:08

+0

yes scope_Identity正常工作 – 2014-09-24 08:04:30

+0

为什么要使用'IDENT_CURRENT'?这将返回最新插入(已提交或未提交)中使用的最新ID,而不是您在此过程中插入的那个*。 – Luaan 2014-09-24 08:21:47

回答

0

根据msdn,如果调用用户对此对象没有足够的权限,则IDENT_CURRENT函数将返回null。
另一种可能性是您的对象名称是错误的,我看到您正在使用dbo前缀进行插入操作。也许这会有所帮助。

+0

我确实有权限,因为我更新插入,但这一个不起作用,我改变了一下,但仍然没有运气。即选择@ ID = Ident_Current('Complaints.ComplaintID') – 2014-09-24 08:08:56

+0

我相信你可以拥有插入权限但不能查看元数据权限。如果你可以测试它,我会授予用户对该表执行此代码所有权(或使其成为db管理员几分钟),以确保它与权限无关。 – Kristof 2014-09-24 08:11:11

+0

至于正确的名称我并不意味着添加身份,而是完整的数据库名称。例如:(Ident_Current('MyDatabase.dbo.Complaints')) – Kristof 2014-09-24 08:13:07