2012-12-13 37 views
1

我想將文章複製到新的集合。身份規範是否,但錯誤:不能將NULL值插入列',

我嘗試過的查詢,但在顯示下列錯誤:

"Cannot insert the value NULL into column '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 

這也不是幫助我,有人可以adivice我如何改變這一點。

我知道解決的辦法是在設計上設置標識要更改,但對我們來說不是一個解決方案;-(。

+2

['IDENTITY'函數](http://msdn.microsoft.com/en-us/library/ms189838.aspx)僅對'SELECT ... INTO'有用。你爲什麼不能改變設計?即使你糾正了語法,你仍然有競爭條件,即使你糾正了競爭條件,那麼你將有阻塞。 –

+0

這是團隊協議。程序員想要從表中生成最後一個ID,如示例LastIdentifiers。對我來說這也很奇怪,因爲它是一個很好的功能來生成這種自動。爲什麼你不應該使用它! 任何方式都是團隊問題;-(。你能幫助我的查詢嗎?有沒有一種方法來實現這種方式? – Robert

回答

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的,但目標是向您展示我解決問題的方法。

希望這會幫助你解決你的問題。