2014-09-24 110 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