sql >> Databáze >  >> RDS >> Sqlserver

Problémy s příkazem SQL Server MERGE

Jakákoli ze čtyř hodnot v #S bude odpovídat hodnotě jednoho řádku vaší cílové tabulky (všechny hodnoty v #S mají id =1 a název ='A' – takže všechny odpovídají jednomu řádku v cíli), takže tato hodnota bude aktualizována čtyřikrát – to je ta chyba říká a je to naprosto správné.

Čeho tady chceš vlastně dosáhnout??

Chcete nastavit adresu na první z hodnot ze zdrojové tabulky? Použijte TOP 1 klauzule ve vašem podvýběru:

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;

Chcete nastavit adresu na náhodný prvek hodnot ze zdrojové tabulky? Použijte TOP 1 a ORDER BY NEWID() klauzule ve vašem podvýběru:

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;

Pokud přiřadíte čtyři zdrojové řádky k jednomu cílovému řádku, nikdy nedosáhnete užitečného výsledku – musíte vědět, co skutečně chcete.

Marc



  1. mysqldump version Chyba při exportu dat z MySQL

  2. Jak mohu uložit HTML kód do pole tabulky Postgresql DB?

  3. Ovladač JDBC není k dispozici pro 'org.postgresql.Driver' pro Spring Roo

  4. dotaz mysql vrací false, i když hodnoty v tabulce existují? Snažíte se najít, pokud ne v tabulce?