update xy.NewYMJT.dbo.DeviceInformation 
set StationStatus=case 
(
 select top 1 b_SenState from TB_KJ139_SensorState_DATA 
 inner join xy.NewYMJT.dbo.DeviceInformation a on 
 Pk_i_SenID=a.StationNumber and a.MineNumber='18'
) when 0 then 3 when 1 then 5 end 
where MineNumber='18'

解决方案 »

  1.   

    --更新设备状态,TB_KJ139_SensorState_DATA为本地库的表,DeviceInformation 为远程表
    update A
    set StationStatus=case 
    (
    select b_SenState from TB_KJ139_SensorState_DATA 
    where Pk_i_SenID=A.StationNumber and A.MineNumber='18'
    ) when 0 then 3 when 1 then 5 end 
    FROM xy.NewYMJT.dbo.DeviceInformation  A
    where A.MineNumber='18'
    --报错数字 名称 'xy.NewYMJT.dbo.DeviceInformation' 包含的前缀数目超过了最大值。最大值为 3。
      

  2.   

    用别名比较省事UPDATE 别名 SET
    FROM 表 别名
      

  3.   

    如果说是子查询返回的值多于一个的错误
    可以按照1楼的修改,但我觉得,如果你的子查询返回了多值的话,可能你的逻辑要重新考虑了
    加TOP1是不会抱错,但是否就是你想要的呢?
      

  4.   

    删除再插入的方案比较简单可以用job 一分钟跑一次脚本来传数据