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;
我已經厭倦了在網上搜索上述錯誤的。如果有人幫助我,我將不勝感激。
該錯誤明確告訴你什麼是問題。至少有一列是自動生成的。不要在插入的列列表中包含它(或它們)。如果我不得不猜測你自動生成了哪些列,我猜可能是'SysStartTime'和'SysEndTime'列,但這純粹是一種猜測。你應該看看你的表格定義。 – ZLK
哦,哇,我錯了。非常感謝你。 –
我刪除了SysStartTime和SysEndTime,問題解決了。 –