楼主你看下这样可行不? ---表A增加字段“Flag”数据类型为“Bit” Update TableA Set Flag=0 GoUpdate a Set Flag=1 From TableA a,TableB b Where (a.a15=b.a15 Or IsNuLL(a.a15,9999999)=9999999) And (a.a14=b.a14 Or IsNuLL(a.a14,9999999)=9999999) And (a.a13=b.a13 Or IsNuLL(a.a13,9999999)=9999999) And (a.a12=b.a12 Or IsNuLL(a.a12,9999999)=9999999) And (a.a11=b.a11 Or IsNuLL(a.a11,9999999)=9999999) And (a.a10=b.a10 Or IsNuLL(a.a10,9999999)=9999999) And (a.a9=b.a9 Or IsNuLL(a.a9,9999999)=9999999) And (a.a8=b.a8 Or IsNuLL(a.a8,9999999)=9999999) And (a.a7=b.a7 Or IsNuLL(a.a7,9999999)=9999999) And (a.a6=b.a6 Or IsNuLL(a.a6,9999999)=9999999) And (a.a5=b.a5 Or IsNuLL(a.a5,9999999)=9999999) And (a.a4=b.a4 Or IsNuLL(a.a4,9999999)=9999999) And (a.a3=b.a3 Or IsNuLL(a.a3,9999999)=9999999) And (a.a2=b.a2 Or IsNuLL(a.a2,9999999)=9999999) And (a.a1=b.a1 Or IsNuLL(a.a1,9999999)=9999999) Go
这种一般使用exists 来判断
这个条件很有问题,如果 a.a15 = 9999999,那么 b.a15可以是任何值,你确定是这样的匹配?
恩 原来是null 我处理成9999999了后来发现没什么必要
表很宽
条件是这样的:
A表 1~16列的值和B表1~16列匹配 完全相同 或A表中是NULL都成立没有前端程序就以数据处理 后面还有很长的操作
和
1,2,3,4,5,6,7 相等
和
1,2,3,4,5,66,NULL 不等
这种逻辑应该能用什么方法实现吧
有NULL值就算把16个字段一起放在索引中都利用不起来,没法可想。
---表A增加字段“Flag”数据类型为“Bit”
Update TableA Set Flag=0
GoUpdate a Set Flag=1 From TableA a,TableB b
Where (a.a15=b.a15 Or IsNuLL(a.a15,9999999)=9999999)
And (a.a14=b.a14 Or IsNuLL(a.a14,9999999)=9999999)
And (a.a13=b.a13 Or IsNuLL(a.a13,9999999)=9999999)
And (a.a12=b.a12 Or IsNuLL(a.a12,9999999)=9999999)
And (a.a11=b.a11 Or IsNuLL(a.a11,9999999)=9999999)
And (a.a10=b.a10 Or IsNuLL(a.a10,9999999)=9999999)
And (a.a9=b.a9 Or IsNuLL(a.a9,9999999)=9999999)
And (a.a8=b.a8 Or IsNuLL(a.a8,9999999)=9999999)
And (a.a7=b.a7 Or IsNuLL(a.a7,9999999)=9999999)
And (a.a6=b.a6 Or IsNuLL(a.a6,9999999)=9999999)
And (a.a5=b.a5 Or IsNuLL(a.a5,9999999)=9999999)
And (a.a4=b.a4 Or IsNuLL(a.a4,9999999)=9999999)
And (a.a3=b.a3 Or IsNuLL(a.a3,9999999)=9999999)
And (a.a2=b.a2 Or IsNuLL(a.a2,9999999)=9999999)
And (a.a1=b.a1 Or IsNuLL(a.a1,9999999)=9999999)
Go