Dit andet forsøg virker ikke, fordi baseret på Books On-Line-posten til OPDATERING
, SQL CE tillader ikke en FROM
klausul i en opdateringserklæring.
Jeg har ikke SQL Compact Edition til at teste den på, men dette kan måske virke:
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
)
Det kan være, at du kan kalde JOBMAKE som JM for at gøre forespørgslen lidt kortere.
REDIGER
Jeg er ikke 100% sikker på begrænsningerne ved SQL CE, da de relaterer til spørgsmålet i kommentarerne (hvordan man opdaterer en værdi i JOBMAKE ved hjælp af en værdi fra JOBVISIT). Forsøg på at henvise til indholdet af EXISTS-sætningen i den ydre forespørgsel understøttes ikke i nogen SQL-dialekt, jeg har stødt på, men der er en anden metode, du kan prøve. Dette er utestet, men kan virke, da det ser ud til, at SQL CE understøtter korrelerede underforespørgsler:
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
)
Der er dog en begrænsning. Denne forespørgsel vil mislykkes, hvis mere end én række i JOBVISIT genindstilles for hver række i JOBMAKE. Hvis dette ikke virker (eller du ikke ligefrem kan begrænse den indre forespørgsel til en enkelt række pr. ydre række), ville det være muligt at udføre en række-for-række-opdatering ved hjælp af en markør.