簡體   English   中英

存儲過程SQL Server 2008

[英]stored procedure sql server 2008

我正在一個項目上,正在使用存儲過程。 我收到此錯誤:

Line: 939
Error: Sys.WebForms.PageRequestManagerServerErrorException: Invalid object name 'IT_Assets'.
Transaction count after EXECUTE indicates a mismatching number of BEGIN and COMMIT statements. Previous count = 0, current count = 1.

請在下面找到我的存儲過程代碼:

alter PROCEDURE [ITAssets_sp_IT_Assets]
-- Add the parameters for the stored procedure here

    (@Mode varchar(12)='ADD',
    @ID integer , @AssetCode nvarchar(20)=null, @Description nvarchar(70)=null,
    @Site nvarchar(10)=null)
AS
Begin

IF @Mode='ADD'
    Begin
Begin Tran
  INSERT INTO [IT_Assets]
      ([ID]
            ,[AssetCode]
            ,[Description]
            ,[Site])
                values
(@ID, @AssetCode, @Description, @Site
)
 If @@ERROR <> 0  
        ROLLBACK TRAN 
    Else
        COMMIT TRAN

Select  @ID
End
ELSE 
Begin
    Begin Tran
            UPDATE [IT_Assets]
                SET 
AssetCode = @AssetCode, Description = @Description, Site = @Site 
WHERE ID = @ID      
If @@ERROR <> 0  
        ROLLBACK TRAN 
    Else
        COMMIT TRAN
    Select  @ID 
End
End

我不理解錯誤,也不知道問題出在哪里? 有人可以幫我解決這個問題嗎?

從錯誤Invalid object name 'IT_Assets'我認為表/視圖“ IT_Assets”與存儲過程存在於不同的數據庫中(假設該對象存在並且您使用的是正確的名稱)。

然后,您需要將Db名稱完全量化

UPDATE [DB_NAME].[dbo].[IT_Assets]  (assuming `dbo` is the owner)

嘗試在程序頂部使用use語句使用數據庫名稱,例如

use [DB_NAME] 
GO
alter PROCEDURE [ITAssets_sp_IT_Assets]
-- Add the parameters for the stored procedure here

    (@Mode varchar(12)='ADD',
 ...

還可以使用TRY .. CATCH構造更改您的事務處理,如下所示

Begin Tran
BEGIN TRY
  INSERT INTO [IT_Assets]
      ([ID]
            ,[AssetCode]
            ,[Description]
            ,[Site])
                values
(@ID, @AssetCode, @Description, @Site);
        COMMIT TRAN;
END TRY
BEGIN CATCH
        ROLLBACK TRAN ;
END CATCH

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM