2017-04-26 17 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

このエラーは、問題の内容を明示的に示しています。少なくとも1つの列が自動的に生成されます。挿入された列のリストにその項目を含めないでください。あなたが自動的に生成している列を推測しなければならない場合は、 'SysStartTime'列と' SysEndTime'列と推測しますが、それはまったく推測です。あなたはあなたのテーブル定義を見てください。 – ZLK

+0

ああうわー私は間違っていた。どうもありがとうございました。 –

+0

私はSysStartTimeとSysEndTimeを消去し、問題は解決しました。 –

答えて

0

私は、SysStartTimeSysEndTimeなどの挿入文から自動生成カラムを削除したときに私の問題を解決しました。 この列はDBMSから自動的に生成され、挿入のための明示的な値は必要ありません。

関連する問題