Foxtable(狐表)用户栏目专家坐堂 → SQL Null问题


  共有5278人关注过本帖树形打印复制链接

主题:SQL Null问题

帅哥哟,离线,有人找我吗?
aizaishuzui
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:250 积分:2095 威望:0 精华:0 注册:2014/3/25 14:24:00
SQL Null问题  发帖心情 Post By:2022/5/4 19:28:00 [只看该作者]

头大了    头特别大了
DataTable 里面的字符串DataRow 空值为 ""
MSSQL 里面存储空的为Null
sele ct count(*) from {表A} where 第一列 = '" & dr("列A") & "'   
返回0
导致插入了无数多重复数据

这个要怎么避免?莫非判断语句?
dim f as string
if dr.IsNull("列A")  then
f = sele ct count(*) from {表A} where 第一列 = ''& or 第一列 is null "'   
else
f = sele ct count(*) from {表A} where 第一列 = '" & dr("列A") & "'   
endif
如果全部所有查询都要改写的话,我怕我会死掉    无数多的if else endif

 回到顶部
帅哥哟,离线,有人找我吗?
程兴刚
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 一级勋章
等级:超级版主 帖子:7259 积分:40814 威望:0 精华:16 注册:2008/8/31 23:23:00
  发帖心情 Post By:2022/5/4 19:35:00 [只看该作者]

sele ct count(*) from {表A} where 第一列 = '" & dr("列A") & "'"

 回到顶部
帅哥哟,离线,有人找我吗?
aizaishuzui
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:250 积分:2095 威望:0 精华:0 注册:2014/3/25 14:24:00
  发帖心情 Post By:2022/5/4 19:39:00 [只看该作者]

不是    你理解错我的意思了    我查询如果不是空值没有问题    例如
Dim cmd As new SQLCommand
cmd.C
cmd.CommandText = "Sele ct Count(*) from {orderItems} Where o_id = '30385065' And oi_id = '29348516' And outer_oi_id is null"

Output.Show(cmd.ExecuteScalar)
等于5


cmd.CommandText = "Sele ct Count(*) from {orderItems} Where o_id = '30385065' And oi_id = '29348516' And outer_oi_id = ''"

Output.Show(cmd.ExecuteScalar)
等于0

 回到顶部
帅哥哟,离线,有人找我吗?
aizaishuzui
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:250 积分:2095 威望:0 精华:0 注册:2014/3/25 14:24:00
  发帖心情 Post By:2022/5/4 20:04:00 [只看该作者]

再个例子 更清晰
Dim cmd As new SQLCommand
cmd.C
Dim dt As DataTable
cmd.CommandText = "Se lect * From {orderItems} Where [_Identify] Is Null"
dt = cmd.ExecuteReader(True) '记得将参数设置为True
Dim dr As DataRow = dt.AddNew()
dr("o_id") = "30385065"
dr("oi_id") = "29348516"
Dim f As String = "o_id = '" & dr("o_id") & "' And oi_id = '" & dr("oi_id") & "' And outer_oi_id = '" & dr("outer_oi_id") & "'"
cmd.CommandText = "Se lect Count(*) from {orderItems} Where " & f
Output.Show(cmd.ExecuteScalar)
输出 0 
If dr.IsNull("outer_oi_id") Then
    f = "o_id = '" & dr("o_id") & "' And oi_id = '" & dr("oi_id") & "' And outer_oi_id is null "
End If
cmd.CommandText = "Se lect Count(*) from {orderItems} Where " & f
Output.Show(cmd.ExecuteScalar)
输出 5

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:112378 积分:572152 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/5/4 22:02:00 [只看该作者]

只能是if else判断,没有其它办法

 回到顶部
帅哥哟,离线,有人找我吗?
aizaishuzui
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:250 积分:2095 威望:0 精华:0 注册:2014/3/25 14:24:00
  发帖心情 Post By:2022/5/4 22:49:00 [只看该作者]

这个好简单的问题    怎么会全网都没办法     都说要判断  

 回到顶部
帅哥哟,离线,有人找我吗?
aizaishuzui
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:250 积分:2095 威望:0 精华:0 注册:2014/3/25 14:24:00
  发帖心情 Post By:2022/5/4 22:50:00 [只看该作者]

我这边一直读接口的数据,然后判断是否有重复的数据,结果现在整个系统数据全都乱了      只能清库重新来了

 回到顶部
帅哥哟,离线,有人找我吗?
aizaishuzui
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:250 积分:2095 威望:0 精华:0 注册:2014/3/25 14:24:00
  发帖心情 Post By:2022/5/4 23:16:00 [只看该作者]

除了  字符串  列有存在这种异常,其他类型的列会不会有呢     例如日期类 、数值列

 回到顶部
帅哥,在线噢!
chen37280600
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1280 积分:7975 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2022/5/4 23:26:00 [只看该作者]

Null和"" 不是同一个东西。你可以理解为 没有纸和白纸的区别。

如果去重,为了排除null的干扰,一般我都会给用来查重的列,先做一个sql,把null批量更新为""

 回到顶部
帅哥哟,离线,有人找我吗?
aizaishuzui
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:250 积分:2095 威望:0 精华:0 注册:2014/3/25 14:24:00
  发帖心情 Post By:2022/5/5 9:27:00 [只看该作者]

杰哥这个方法可以   谢谢      我试试看会不会有问题

 回到顶部