sql >> Database teknologi >  >> RDS >> Sqlserver

Problemer med SQL Server MERGE-sætning

Enhver af de fire værdier i #S vil matche din måltabels enkeltrækkeværdi (alle værdier i #S har id =1 og navn ='A' - så de matcher alle den enkelte række i målet), så denne værdi vil blive opdateret fire gange - det er hvad fejlen siger, og det er helt rigtigt.

Hvad er det egentlig du vil opnå her??

Vil du indstille adressen til den første af værdierne fra kildetabellen? Brug en TOP 1 klausul i dit undervalg:

MERGE #T 
USING (SELECT TOP 1 id, name, address FROM #S) AS S
ON #T.id = S.id AND #T.Name = S.Name
WHEN NOT MATCHED THEN
    INSERT VALUES(S.id,S.Name, S.Address)
WHEN MATCHED THEN
    UPDATE SET Address = S.Address;

Vil du indstille adressen til et tilfældigt element af værdierne fra kildetabellen? Brug en TOP 1 og ORDER BY NEWID() klausul i dit undervalg:

MERGE #T 
USING (SELECT TOP 1 id, name, address FROM #S ORDER BY NEWID()) AS S
ON #T.id = S.id AND #T.Name = S.Name
WHEN NOT MATCHED THEN
    INSERT VALUES(S.id,S.Name, S.Address)
WHEN MATCHED THEN
    UPDATE SET Address = S.Address;

Hvis du matcher fire kilderækker til en enkelt målrække, får du aldrig et brugbart resultat - du skal vide, hvad du virkelig vil have.

Marc



  1. T-SQL få antal arbejdsdage mellem 2 datoer

  2. SQL VÆLG MAKS

  3. Hvordan kan jeg gå gennem alle filerne i en mappe ved hjælp af TSQL?

  4. Hvorfor returnerer SQL workbench altid en række fuld af null-værdier i hver forespørgsel?