web-dev-qa-db-fra.com

"Impossible d'insérer la valeur NULL", mais il n'y a pas de valeurs NULL!

Cette question suit la réponse de mon autre question là-bas: Insérer avec OUTPUT corrélé à la table de sous-requête

La colonne Person.LastName a une contrainte NOT NULL. Lorsque j'exécute ce code:

CREATE TABLE tempIDs
( PersonId INT, 
  FinancialInstitutionId INT
);

MERGE INTO Person 
USING FinancialInstitution AS fi
  ON 1 = 0
WHEN NOT MATCHED THEN
  INSERT (CreationDate, AdministrativeStatus, LastName, Street1, Number1, City1, State1, PostCode1, CountryId1, WorkDirectPhone1, Fax1, Email1)
  VALUES (GetDate(), 'Legal', fi.Name, fi.Street, fi.Number, fi.City, fi.[State], fi.PostCode, fi.CountryId, fi.PhoneNumber, fi.Fax, fi.Email)
OUTPUT inserted.Id, fi.Id INTO tempIDs;

UPDATE fi
SET fi.PersonId = t.PersonId
FROM FinancialInstitution AS fi
  JOIN tempIDs AS t
    ON fi.Id = t.FinancialInstitutionId ;

J'obtiens l'erreur suivante:

Cannot insert the value NULL into column 'LastName', table 'Person'; column does not allow nulls. UPDATE fails.

Le fait est qu'il n'y a pas de FinancialInstitution.Name qui est NULL.

SELECT Name FROM FinancialInstitution WHERE Name = NULL

Cela ne renvoie aucune ligne. De plus, si je remplace fi.Name par une valeur ('A Last Name'), la demande fonctionne.

6
Yugo Amaryl

NULL n'est pas une valeur. Quelque chose ne peut pas '=' NULL

Tu veux:

SELECT Name FROM FinancialInstitution WHERE Name IS NULL
12
Mark Sinkinson