sql >> Database >  >> RDS >> Sqlserver

Problemen met SQL Server MERGE-instructie

Elk van de vier waarden in #S komt overeen met de enkele rijwaarde van uw doeltabel (alle waarden in #S hebben id =1 en naam ='A' - dus ze komen allemaal overeen met de enkele rij in het doel), dus deze waarde wordt vier keer bijgewerkt - dat is wat de fout is zegt, en het is volkomen juist.

Wat wil je hier echt bereiken??

Wilt u het adres instellen op de eerste van de waarden uit de brontabel? Gebruik een TOP 1 clausule in uw subselectie:

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;

Wilt u het adres instellen op een willekeurig element van de waarden uit de brontabel? Gebruik een TOP 1 en ORDER BY NEWID() clausule in uw subselectie:

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;

Als u vier bronrijen koppelt aan één doelrij, krijgt u nooit een bruikbaar resultaat - u moet weten wat u echt wilt.

Marc



  1. Kiezen uit een door komma's gescheiden veld

  2. PG::Fout:SELECT DISTINCT, ORDER BY-uitdrukkingen moeten in de selectielijst verschijnen

  3. Hoe externe sleutelbeperkingen betrouwbaar te maken?

  4. Hoe plaats ik een foto vanuit de iPhone-app (in Swift) naar de MySQL-database?