sql >> Database >  >> RDS >> Sqlserver

Sql Server CE-tabelupdate uitvoeren vanuit een andere tabel

Uw tweede poging werkt niet omdat, gebaseerd op het Books On-Line item voor UPDATE , SQL CE staat geen FROM toe clausule in een update-instructie.

Ik heb geen SQL Compact Edition om het op te testen, maar dit zou kunnen werken:

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
             )

Het kan zijn dat je JOBMAKE als JM kunt gebruiken om de zoekopdracht iets korter te maken.

BEWERKEN

Ik ben niet 100% zeker van de beperkingen van SQL CE omdat ze betrekking hebben op de vraag die in de opmerkingen is gesteld (hoe een waarde in JOBMAKE bij te werken met behulp van een waarde van JOBVISIT). Proberen te verwijzen naar de inhoud van de EXISTS-clausule in de buitenste query wordt niet ondersteund in elk SQL-dialect dat ik ben tegengekomen, maar er is een andere methode die u kunt proberen. Dit is niet getest, maar zou kunnen werken, omdat het lijkt alsof SQL CE gecorreleerde subquery's ondersteunt:

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
                 )

Er is echter een beperking. Deze query zal mislukken als meer dan één rij in JOBVISIT voor elke rij in JOBMAKE opnieuw wordt afgestemd. Als dit niet werkt (of u kunt de binnenste query niet rechtstreeks beperken tot een enkele rij per buitenste rij), zou het mogelijk zijn om uit te voeren een rij-voor-rij update met behulp van een cursor.




  1. Zoeken in volledige tekstcatalogus/index voor %book%

  2. MET (NOLOCK) vs SET TRANSACTIE ISOLATIENIVEAU LEZEN NIET-COMMITTED

  3. RODBC-query geeft geen gegevens terug

  4. Lijst met SQL-tags en tagfiltering