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.
NULL
n'est pas une valeur. Quelque chose ne peut pas '=' NULL
Tu veux:
SELECT Name FROM FinancialInstitution WHERE Name IS NULL