2017-04-26 35 views
0

我有一個存儲過程,當我運行它,我得到一個錯誤如下:消息13536,級別16,狀態1,133線[批量起始行7]

無法插入顯式值 表'CAS2.dbo.Tree'中的GENERATED ALWAYS列。使用帶有列列表的INSERT到 排除GENERATED ALWAYS列,或將DEFAULT插入 GENERATED ALWAYS列。

USE [Test] 
GO 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

ALTER PROCEDURE [dbo].[sp_InsertDiagramData] 
    @DiagramId varchar(100) , 
    @DiagramName NVARCHAR(200) , 
    @DiagramClass varchar(50), 
    @DiagramPosition varchar(100) = NULL, 
    @IsReadonly BIT = 0 , 
    @CreatorUserId INT , 
    @Nodes Node READONLY , 
    @NodesDetail Detail READONLY, 
    @Links Link READONLY 
AS 
    BEGIN TRY 
     BEGIN TRANSACTION 

      IF(@DiagramId IS NOT NULL) 
       BEGIN 
       -- Clear old data 
        DELETE FROM dbo.Links WHERE DiagramId = @DiagramId; 
        DELETE FROM dbo.Nodes WHERE DiagramId = @DiagramId; 
        DELETE FROM dbo.Diagrams WHERE Id = @DiagramId; 
       DELETE FROM dbo.NodesDetails WHERE DiagramId = @DiagramId; 
        -- Business table 
    DELETE FROM dbo.WorkStationToProduct WHERE ExpenseCenterId = @DiagramId 
       END 
    ELSE 
       SET @DiagramId = NEWID() 

    -- Insert into Tree and TreeDetails table 

    DECLARE @DetailsId INT 
    DECLARE @OutputMaster TABLE (id INT); 

    INSERT INTO dbo.Tree 
        (Number , 
         ParentProductId , 
         Scale , 
         FinalHumidityPercent , 
         UnitId , 
         Setting , 
         ModifiedDate , 
         SysStartTime , 
         SysEndTime , 
         UserId , 
         ComputerName , 
         flag , 
         ConfirmUserId 
        ) 
    -- here you will store the bulk inserted id's 
    OUTPUT inserted.Id into @OutputMaster(id) 
    SELECT a.NodeId [Number], f.Value [ParentProductId], h.Value [Scale], 
      g.Value [FinalHumidityPercent], i.Value [UnitId], 
      0 [Setting], dbo.[fnMiladiToShamsi](GetDate()) [ModifiedDate], 
      SYSDATETIME() [SysStartTime] ,SYSDATETIME() [SysEndTime] , 
      @CreatorUserId [UserId], HOST_NAME() [ComputerName], '0' [flag], 
      'NULL' [ConfirmUserId] 
    FROM dbo.NodesDetails a 
    LEFT JOIN dbo.NodesDetails b ON a.NodeId = b.NodeId AND b.[Key] = 
      'ChildProductId' 
    LEFT JOIN dbo.NodesDetails c ON a.NodeId = c.NodeId AND c.[Key] =     
      'InUseValue' 
    LEFT JOIN dbo.NodesDetails d ON a.NodeId = d.NodeId AND d.[Key] = 
      'Mammock' 
    LEFT JOIN dbo.NodesDetails e ON a.NodeId = e.NodeId AND e.[Key] = 
      'MaterialTypeId' 
    LEFT JOIN dbo.NodesDetails f ON a.NodeId = f.NodeId AND f.[Key] = 
      'ParentProductId' 
    LEFT JOIN dbo.NodesDetails g ON a.NodeId = g.NodeId AND g.[Key] = 
      'FinalHumidityPercent' 
    LEFT JOIN dbo.NodesDetails h ON a.NodeId = h.NodeId AND h.[Key] = 
      'Scale' 
    LEFT JOIN dbo.NodesDetails i ON a.NodeId = i.NodeId AND i.[Key] = 
      'UnitId' 
    WHERE a.DiagramId = @DiagramId 
       AND a.[Key] = 'ParentProductId' 
       AND a.Value IN 
       (SELECT x.Value FROM dbo.NodesDetails x 
       WHERE 
       x.[Key]='ProductId' AND x.DiagramId = @DiagramId) 
    ORDER BY a.NodeId; 

    SELECT * FROM dbo.Diagrams WHERE Id = @DiagramId 

     COMMIT TRANSACTION 
    END TRY 
    BEGIN CATCH 
     ROLLBACK TRANSACTION; 

     THROW; 
    END CATCH; 

我已經厭倦了在網上搜索上述錯誤的。如果有人幫助我,我將不勝感激。

+4

該錯誤明確告訴你什麼是問題。至少有一列是自動生成的。不要在插入的列列表中包含它(或它們)。如果我不得不猜測你自動生成了哪些列,我猜可能是'SysStartTime'和'SysEndTime'列,但這純粹是一種猜測。你應該看看你的表格定義。 – ZLK

+0

哦,哇,我錯了。非常感謝你。 –

+0

我刪除了SysStartTime和SysEndTime,問題解決了。 –

回答

0

我的問題解決了,當我從插入語句中刪除自動生成列如SysStartTime,SysEndTime。 這些列自動從DBMS生成,並且不需要爲插入顯式值。

相關問題