Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 除insert语句外,存储过程工作正常_Sql_Sql Server_Stored Procedures_Sql Server 2005 - Fatal编程技术网

Sql 除insert语句外,存储过程工作正常

Sql 除insert语句外,存储过程工作正常,sql,sql-server,stored-procedures,sql-server-2005,Sql,Sql Server,Stored Procedures,Sql Server 2005,我试图在存储过程中执行一些插入和更新,但它没有相应地工作。除了insert语句外,所有操作都正常。我想不出这个问题 我的存储过程如下所示 CREATE PROCEDURE [dbo].[USP_Return_Sample_SubmitForApproval] @Receipt_Id INT, @Remarks NVARCHAR(2000),

我试图在存储过程中执行一些插入和更新,但它没有相应地工作。除了insert语句外,所有操作都正常。我想不出这个问题

我的存储过程如下所示

 CREATE PROCEDURE [dbo].[USP_Return_Sample_SubmitForApproval]                                        
 @Receipt_Id INT,                
 @Remarks NVARCHAR(2000),                  
 @Label nvarchar(250),                        
 @User_Remarks nvarchar(2000),                        
 @Status char(1),                                
 @User_Id INT,                                
 @Role_Id INT,                          
 @Unit_Id INT,                          
 @Unit_Type_id INT,          
 @Analyst_Id  INT,      
 @ParamXML   XML                                
AS                                                
BEGIN                                                
-- SET NOCOUNT ON added to prevent extra result sets from                                                
-- interfering with SELECT statements.                                                
 SET NOCOUNT ON;                                      
 Declare @intErrorCode INT, @Project_Id INT, @Sample_Type NVARCHAR(100) ,@InventoryCount INT, @UpdatedCount INT                         

 BEGIN TRAN       
  DECLARE @tv_Doc TABLE (ID INT IDENTITY(1,1) NOT NULL,ReceiptId INT,SampleTypeId INT,StorageId INT,RackId  INT, ShelfId  INT,Box_Id INT,Project_Id INT,Matrix_Type_Id INT )                  

  INSERT INTO @tv_Doc (ReceiptId,SampleTypeId,StorageId,RackId,ShelfId,Box_Id,Project_Id,Matrix_Type_Id )                                   
  SELECT          
  TempDoc.Item.value('@RecieptId', 'INT'),           
  TempDoc.Item.value('@SampleTypeId', 'INT'),            
  TempDoc.Item.value('@StorageId', 'INT'),                               
  TempDoc.Item.value('@RackId', 'INT'),                    
  TempDoc.Item.value('@ShelfId', 'INT'),    
  TempDoc.Item.value('@Box_Id', 'INT'),    
  TempDoc.Item.value('@Project_Id', 'INT'),    
  TempDoc.Item.value('@Matrix_Type','INT')                   
  FROM @ParamXML.nodes('/root/row') AS TempDoc(Item)    




  UPDATE [ITEMS] SET [ITEMS].Instrument_Id = [TEMP].StorageId, [ITEMS].Rack_Id = [TEMP].RackId,[ITEMS].Shelf_Id = [TEMP].ShelfId,[ITEMS].Box_Id =[TEMP].Box_Id            
  FROM BSMS_CPP_RCPT_RETURN_ITEMS [ITEMS] INNER JOIN BSMS_CPP_INVENTORY [INV] ON [ITEMS].Item_Barcode = [INV].Item_Barcode     
  INNER JOIN @tv_Doc [TEMP] ON [ITEMS].Sample_Type_Id  = [TEMP].SampleTypeId AND [ITEMS].Receipt_Id = [TEMP].ReceiptId AND [INV].Box_Id =  [TEMP].Box_Id    
  AND [TEMP].Project_Id = [ITEMS].Project_Id   AND ([TEMP].Matrix_Type_Id = 0 OR [TEMP].Matrix_Type_Id = [ITEMS].Matrix_Type_Id)    

  UPDATE BSMS_CPP_RCPT_RETURN SET Status = @Status,Remarks =@Remarks, Created_Datetime=GETDATE()  WHERE Receipt_Id = @Receipt_Id             

  IF (@Status = 'V')            
  BEGIN    

  UPDATE [INV] SET [INV].Storage_Type_Id=[TEMP].StorageId,[INV].Rack_Id=[TEMP].RackId,[INV].Shelf_Id=[TEMP].ShelfId    
  FROM BSMS_CPP_INVENTORY [INV] INNER JOIN @tv_Doc [TEMP] ON [INV].Category_Id  = [TEMP].SampleTypeId AND [INV].Box_Id =  [TEMP].Box_Id    
  AND [INV].Project_Id = [TEMP].Project_Id    AND ([TEMP].Matrix_Type_Id = 0 OR [TEMP].Matrix_Type_Id = [INV].Matrix_Type_Id)        


  UPDATE [INV] SET [INV].Is_Exist = 1,[INV].Storage_Type_Id=[ITEMS].Instrument_Id,[INV].Rack_Id=[ITEMS].Rack_Id,[INV].Shelf_Id=[ITEMS].Shelf_Id            
  ,Replaced_By=@User_Id,Replaced_Analyst =@Analyst_Id ,Replaced_Datetime=GETDATE()--,Category_Id = [ITEMS].Sample_Type_Id    
  FROM BSMS_CPP_INVENTORY [INV] INNER JOIN BSMS_CPP_RCPT_RETURN_ITEMS [ITEMS] ON [INV].Item_Barcode = [ITEMS].Item_Barcode    
  INNER JOIN @tv_Doc [TEMP] ON [ITEMS].Sample_Type_Id  = [TEMP].SampleTypeId AND [ITEMS].Receipt_Id = [TEMP].ReceiptId AND [INV].Box_Id =  [TEMP].Box_Id    
  AND [TEMP].Project_Id = [ITEMS].Project_Id   AND ([TEMP].Matrix_Type_Id = 0 OR [TEMP].Matrix_Type_Id = [INV].Matrix_Type_Id)           
  WHERE [ITEMS].Receipt_Id = @Receipt_Id            

  DELETE FROM BSMS_CPP_INVENTORY_ANALYST WHERE BSMS_CPP_INVENTORY_ANALYST.Item_Barcode IN            
  (SELECT [ITEM].Item_Barcode FROM BSMS_CPP_RCPT_RETURN_ITEMS [ITEM] WHERE [ITEM].Receipt_Id = @Receipt_Id)    

   DECLARE @Dt DATETIME = GETDATE()   
  INSERT INTO BSMS_CPP_RCPT_RETURN_ESIGN                 
  (Receipt_Id,User_Role,User_Id,User_Datetime,User_Remarks,Action_Label)VALUES                        
  (@Receipt_Id,@Role_Id,@User_Id,@Dt,@User_Remarks,@Label)         

  INSERT INTO BSMS_CPP_RCPT_RETURN_ESIGN                 
  (Receipt_Id,User_Role,User_Id,User_Datetime,User_Remarks,Action_Label)VALUES                        
  (@Receipt_Id,@Role_Id,@Analyst_Id,@Dt,@User_Remarks,'Witnessed By')                           


   EXEC USP_AT_INS_CPP_Return_Sample @Receipt_Id, @Dt              


   DECLARE @Replaced_FRC NVARCHAR(200),@Replaced_Analyst NVARCHAR(200)    
   SELECT @Replaced_FRC = Display_Name FROM BSMS_MST_SYS_USERS WHERE User_Id = @User_Id    
   SELECT @Replaced_Analyst = Display_Name FROM BSMS_MST_SYS_USERS WHERE User_Id = @Analyst_Id    

   UPDATE [ISSUE] SET Replaced_Samples = '1', Replaced_FRC=@Replaced_FRC,Replaced_Analyst =@Replaced_Analyst ,Replaced_Datetime=@Dt,Remarks = @Remarks    
  FROM BSMS_RPT_ISSUANCE [ISSUE] INNER JOIN BSMS_CPP_INVENTORY [INV] ON [ISSUE].Inventory_Id = [INV].Inventory_Id    
  INNER JOIN BSMS_CPP_RCPT_RETURN_ITEMS [ITEMS] ON [INV].Item_Barcode = [ITEMS].Item_Barcode    
  WHERE [ITEMS].Receipt_Id = @Receipt_Id AND [ISSUE].RPT_Receipt_Id = (SELECT MAX([ISS].RPT_Receipt_Id) FROM BSMS_RPT_ISSUANCE [ISS] WHERE [ISS].Inventory_Id = [INV].Inventory_Id)     

  END            



  SELECT @intErrorCode = @@ERROR                                    

  IF (@intErrorCode <> 0)                                     
  ROLLBACK TRAN                                    
  COMMIT TRAN                                    
  Select @intErrorCode [ERROR]                                        
END

请帮助。请提前感谢如果您希望
Id
列具有您在insert语句中提供的
receiptId
值,那么将
Id
列作为
Identity
列是没有意义的

标识列会自动增加插入的每个新记录的列计数器

因此,要使插入生效,请从插入的值中删除
@receiptid
从要插入的列接收Id

或者如果要显式插入receipt_Id,则

不要像这样在创建表定义中提到它

DECLARE @tv_Doc TABLE (ID INT NOT NULL,ReceiptId INT,SampleTypeId INT,StorageId INT,
RackId  INT, ShelfId  INT,Box_Id INT,Project_Id INT,Matrix_Type_Id INT ) 

MySql和SQL Server?是哪个?@Larnu我使用的是SQL server 2005。为什么使用ID列作为标识列。这就是问题的原因。@AmitKumar我已经更新了我的问题。我在那些在其他表中插入数据的语句中遇到了问题。谢谢。错误信息是?我已经更新了我的问题。我认为@tvdoc与其他两个惰性语句没有任何关系。谢谢你指出我的错误。我认为这个答案是正确的,问题是当一个字段被标记为IDENTITY时,不能插入值,因为这意味着只有DB引擎可以写入该字段。您必须删除该列并重新创建它,或者调整脚本,使其在不使用标识定义的情况下创建表。
DECLARE @tv_Doc TABLE (ID INT NOT NULL,ReceiptId INT,SampleTypeId INT,StorageId INT,
RackId  INT, ShelfId  INT,Box_Id INT,Project_Id INT,Matrix_Type_Id INT )