Identity Specificiaction为No,但错误:无法将值NULL插入列',

时间:2012-12-13 15:16:19

标签: sql insert identity

我想将文章复制到新的集合中。

我尝试了一个查询,但显示了以下错误:

  

“无法将值NULL插入列'intArticleCollectionId'”

我在互联网上搜索了一个解决方案。直到现在我有以下查询:

DECLARE @lastID int
DECLARE @lastID = Last_ID from LastIdentifiers where Tablename ='WA_ARTICLECOLLECTIONS'

INSERT INTO WA_ARTICLECOLLECTIONS (intArticleCollectionId,intArticleId,intCollectionId,chvArticleNr,chvFabricDescription,inyActive)
SELECT 
    IDENTITY(int, @lastID , 1) AS ID, intArticleCollectionId,intArticleId,4,chvArticleNr,chvFabricDescription,inyActive 
FROM 
    WA_ARTICLECOLLECTIONS 
WHERE intCollectionId = 5

这对我没有帮助,有人可以告诉我如何改变这一点。

我知道解决方案是改变设计以设置Identity ON,但这对我们来说不是解决方案; - (。

1 个答案:

答案 0 :(得分:0)

正如评论中所说,最好的解决方案是重新设计表格,以便从IDENTITY类型中受益。但这并不总是可行的,这是我遇到同样问题时的解决方案:

DECLARE @lastId   INT
DECLARE @newItems TABLE (id                   INT  IDENTITY(1,1)
                        ,articleId            INT
                        ,collectionId         INT
                        ,articleNr            VARCHAR(20)
                        ,fabricDescription    VARCHAR(256)
                        ,active               BIT)

SET @lastId = (SELECT MAX(AC.intArticleCollectionId)
               FROM WA_ARTICLECOLLECTIONS AC)

INSERT INTO @newItems(articleId, collectionId, articleNr, fabricDescription, active)
SELECT AC.intArticleId
    ,4
    ,AC.chvArticleNr
    ,AC.chvFabricDescription
    ,AC.inyActive 
FROM WA_ARTICLECOLLECTIONS AC
WHERE AC.intCollectionId = 5

INSERT INTO WA_ARTICLECOLLECTIONS (intArticleCollectionId,intArticleId,intCollectionId,chvArticleNr,chvFabricDescription,inyActive)
SELECT @lastId + I.id
    ,articleId
    ,collectionId
    ,articleNr
    ,fabricDescription
    ,active
FROM @newItems I

您可能需要调整表@newItems的列类型,但目标是向您展示我解决问题的方法。

希望这可以帮助您解决问题。

相关问题