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

Jak provést aktualizaci tabulky SQL Server CE z jiné tabulky

Váš druhý pokus nefunguje, protože na základě položky Books On-Line pro AKTUALIZACI , SQL CE neumožňuje FROM klauzule v aktualizačním prohlášení.

Nemám SQL Compact Edition, abych to otestoval, ale mohlo by to fungovat:

UPDATE JOBMAKE
SET WIP_STATUS = '10sched1'
WHERE EXISTS (SELECT 1
              FROM JOBVISIT AS JV
              WHERE JV.JBT_TYPE   = JOBMAKE.JBT_TYPE
              AND   JV.JOB_NUMBER = JOBMAKE.JOB_NUMBER
              AND   JV.JVST_ID    = @jvst_id
             )

Je možné, že můžete označit JOBMAKE jako JM, aby byl dotaz o něco kratší.

UPRAVIT

Nejsem si 100% jistý omezeními SQL CE, protože se týkají otázky vznesené v komentářích (jak aktualizovat hodnotu v JOBMAKE pomocí hodnoty z JOBVISIT). Pokus o odkaz na obsah klauzule EXISTS ve vnějším dotazu není podporován v žádném dialektu SQL, se kterým jsem se setkal, ale můžete zkusit jinou metodu. Toto není testováno, ale může fungovat, protože to vypadá, že SQL CE podporuje korelované poddotazy:

UPDATE JOBMAKE 
SET WIP_STATUS = (SELECT JV.RES_CODE 
                  FROM JOBVISIT AS JV 
                  WHERE JV.JBT_TYPE = JOBMAKE.JBT_TYPE 
                  AND   JV.JOB_NUMBER = JOBMAKE.JOB_NUMBER 
                  AND   JV.JVST_ID = 20
                 )

Existuje však omezení. Tento dotaz selže, pokud je více než jeden řádek v JOBVISIT přeladěn pro každý řádek v JOBMAKE. Pokud to nefunguje (nebo nemůžete přímo omezit vnitřní dotaz na jeden řádek na vnější řádek), bylo by možné provést aktualizace řádek po řádku pomocí kurzoru.




  1. MySQL / MariaDB:jak najít mezery v datech založených na čase?

  2. MYSQL Jak používat trim ve výběrovém dotazu

  3. Je praktické dynamicky normalizovat tabulku?

  4. Předběžné načtení varování Sphinx:nepodařilo se otevřít