2014-09-17 3 views
0

J'ai une table appelée [dbo].[ProductComponentRelationship] avec 4 champsDéclaration de mise à jour ne réussit pas

[ProductComponentRelationshipID] PK, INt, Not Null 
[ProductItemID] FK, Int Not Null 
[ComponentItemID] FK, Int, Not Null 
[SequenceNumber] int null 

Ce tableau renferme un tas de valeurs. J'ai besoin de mettre à jour 4000 enregistrements dans le tableau ci-dessus. Par conséquent j'ai peuplé une table séparée avec un productItemID et la nouvelle valeur ComponentitemID. J'ai essayé d'exécuter l'instruction SQL ci-dessous et il a échoué:

update ProductComponentRelationship set ComponentItemID = 
(select compid from cst_pricefix where 
ProductComponentRelationship.ProductItemID = cst_pricefix.prditem and 
ProductComponentRelationship.ProductComponentRelationshipID = ProductComponentRelationship.ProductComponentRelationshipID) 

Error Message: 
Msg 515, Level 16, State 2, Line 1 
Cannot insert the value NULL into column 'ComponentItemID', table 'SDSDB.dbo.ProductComponentRelationship'; column does not allow nulls. UPDATE fails. 
+2

Semble simple. Vous définissez ce champ sur null et il échoue car il ne peut pas être défini sur null. Cette déclaration renvoie-t-elle quelque chose? sélectionnez compid à partir de cst_pricefix où ProductComponentRelationship.ProductItemID = cst_pricefix.prditem et ProductComponentRelationship.ProductComponentRelationshipID = ProductComponentRelationship.ProductComponentRelationshipID – Twelfth

Répondre

1

Dans ce SQL Server, il ressemble à de la dbo, vous pouvez mettre à jour sur une jointure comme ceci:

update 
    pcr 
set 
    ComponentItemID = f.compid 
from 
    ProductCompnentRelationship pcr 
     inner join 
    cst_pricefix f 
     on pcr.ProductItemID = f.prditem 

I Je ne suis pas sûr de ce que ProductComponentRelationship.ProductComponentRelationshipID = ProductComponentRelationship.ProductComponentRelationshipID était à propos de votre requête originale, donc il peut y avoir quelque chose qui manque à la mienne.

Questions connexes