Lần thử thứ hai của bạn không hiệu quả vì dựa trên mục nhập Sách Trực tuyến để CẬP NHẬT
, SQL CE không cho phép FROM
mệnh đề trong một tuyên bố cập nhật.
Tôi không có SQL Compact Edition để kiểm tra, nhưng cách này có thể hoạt động:
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
)
Có thể bạn có thể đặt bí danh JOBMAKE là JM để làm cho truy vấn ngắn hơn một chút.
CHỈNH SỬA
Tôi không chắc chắn 100% về các hạn chế của SQL CE vì chúng liên quan đến câu hỏi được nêu ra trong nhận xét (cách cập nhật giá trị trong JOBMAKE bằng cách sử dụng giá trị từ JOBVISIT). Cố gắng tham chiếu đến nội dung của mệnh đề EXISTS trong truy vấn bên ngoài không được hỗ trợ trong bất kỳ phương ngữ SQL nào mà tôi đã gặp, nhưng có một phương pháp khác mà bạn có thể thử. Điều này chưa được kiểm tra nhưng có thể hoạt động, vì có vẻ như SQL CE hỗ trợ các truy vấn con tương quan:
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
)
Tuy nhiên, có một hạn chế. Truy vấn này sẽ không thành công nếu nhiều hơn một hàng trong JOBVISIT được khôi phục cho mỗi hàng trong JOBMAKE. cập nhật từng hàng bằng con trỏ.