SQL SERVER多列子查询

来源:互联网 发布:贵阳大数据展示中心 编辑:程序博客网 时间:2024/05/21 06:26

今天,写导入数据的存储过程时,用到多列子查询,想把临时表里有的,而原表里没有的数据插入到原表里面。原表里若有了,就不用再插入了。

我当时这样写的:

USE SUBJECTDB_DATA;
   BEGIN TRAN;
   INSERT INTO SUBJECTDB.ProDefine.Project_Corporation
   SELECT pro.CODE,COR.CODE
   FROM BDD_PROJECTINFO_INSERT INS
   LEFT JOIN SUBJECTDB.PRODEFINE.Corporation COR ON INS.所属法人公司=COR.CNNAME
   LEFT JOIN SubjectDB.ProDefine.ProjectInfo pro ON INS.项目名称=PRO.CNNAME
   WHERE (PRO.CODE,cor.code) NOT IN (SELECT (PROJECTCODE,CorperationCode) FROM SUBJECTDB.ProDefine.Project_Corporation)

结果报错:

消息 4145,级别 15,状态 1,第 8 行
An expression of non-boolean type specified in a context where a condition is expected, near ','.
消息 102,级别 15,状态 1,第 8 行
Incorrect syntax near ','.
出错原因:oracle里面多列子查询可以这样写WHERE(col1,col2) NOT IN(SELECT (COL1,COL2) FROM ……),但SQL SERVER里面不支持。

解决办法:用CHECKSUM模拟。

如,改动如下,就可以了。

USE SUBJECTDB_DATA;
   BEGIN TRAN;
   INSERT INTO SUBJECTDB.ProDefine.Project_Corporation
   SELECT pro.CODE,COR.CODE
   FROM BDD_PROJECTINFO_INSERT INS
   LEFT JOIN SUBJECTDB.PRODEFINE.Corporation COR ON INS.所属法人公司=COR.CNNAME
   LEFT JOIN SubjectDB.ProDefine.ProjectInfo pro ON INS.项目名称=PRO.CNNAME
   where  checksum(PRO.CODE,COR.CODE) not in  (select checksum(PROJECTCODE,CorperationCode) FROM SUBJECTDB.ProDefine.Project_Corporation)

 还可以通过NOT EXISTS实现:

如:

USE SUBJECTDB_DATA;
   BEGIN TRAN;
   INSERT INTO SUBJECTDB.ProDefine.Project_Corporation
   SELECT pro.CODE,COR.CODE
   FROM BDD_PROJECTINFO_INSERT INS
   LEFT JOIN SUBJECTDB.PRODEFINE.Corporation COR ON INS.所属法人公司=COR.CNNAME
   LEFT JOIN SubjectDB.ProDefine.ProjectInfo pro ON INS.项目名称=PRO.CNNAME

  WHERE NOT EXISTS(SELECT *

                                                       FROM  SUBJECTDB.ProDefine.Project_Corporation P_COR

                                 WHERE P_COR.PROJECTCODE=PRO.CODE

                                             AND P_COR.CorperationCode=COR.CODE

                                                          )

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 gta5车被扣押了怎么办 侠盗猎车手5卡怎么办 英雄联盟转区后没法快捷施法怎么办 欠太多人的钱怎么办 我欠了很多钱怎么办 输了那么多钱我该怎么办 家里欠了钱我该怎么办 欠了好多钱我该怎么办 赌球输了好几千怎么办 欠信用卡的人死了怎么办 欠别人钱人死了怎么办 别人欠我钱人死了怎么办 美国生娃孩子怎么办医保 黑在美国病了怎么办 在外打工房租太贵怎么办 在外面打工房租租不起怎么办 买车型号错了怎么办 沃出行不退押金怎么办 钢铁雄心4人力0怎么办 钢铁雄心4没工厂怎么办 钢铁雄心4锁区怎么办 qq超市金币满了怎么办 旋转轮胎2车翻了怎么办 轮胎里面卡进小石子应该怎么办 手游吃鸡模拟器已经到达上限怎么办 逆战场手游模拟器黑屏怎么办 欧洲卡车2翻车了怎么办 卧式注塑机锁模久了打不开怎么办 欧洲卡车2困了怎么办 欧卡2没油了怎么办 欧卡2车卡住了怎么办 欧卡2车子卡住了怎么办 做题手感变差怎么办 吃鸡游戏掉帧怎么办 买了俄区游戏怎么办 战地1子弹用完了怎么办 1kb彩信点开了怎么办 玩地球末日卡顿怎么办 电脑显示不亮了怎么办 电脑玩游戏显卡停止运行怎么办 ie浏览器打开就停止工作怎么办