以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  update语句在ft中使用的困惑  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=50690)

--  作者:scott518
--  发布时间:2014/5/11 13:38:00
--  update语句在ft中使用的困惑

Dim dr As DataRow = DataTables("编码表").Find("产品编码 = \'A001\'")
If dr IsNot Nothing Then
    Dim a1 As String = dr("品名")
    Dim a2 As String = dr("规格")
    Dim a3 As String = dr("颜色")
    Dim cmd As New SQLCommand
    cmd.ConnectionName = Mydata
    cmd.CommandText = "Updat 表A set 品名 = \'" & a1 & "\',规格 = \'" & a2 & "\',颜色 = \'" & a3 & "\' where 产品编码 = \'A001\'"
    cmd.ExecuteNonQuery()
End If

 

上面的代码如果“品名,规格,颜色”三个字段的值都不是null时表A中的执行结果是正确的。但如果三者的值为null的话,update更新后实际数据库表A中三者的值就变成一个空的值,但却不是null,我想要的结果是如果编码表中品名,规格,颜色原来是null,Update到表A中后仍然是null,请问,update语句要怎么写才正确?下面这个写法是不正确的。

Updat 表A set 品名 = isnull(\'" & a1 & "\',null),规格 = isnull(\'" & a2 & "\',null)

 

谢谢!


--  作者:kunmails
--  发布时间:2014/5/11 14:21:00
--  回复:(scott518)update语句在ft中使用的困惑

我之前也遇到这个问题 后来在sql中增加自定义函数解决了

如下

CREATE  Function  MY(@var nvarchar(100)) 
Returns nvarchar(100) 
BEGIN 
IF @var IS NULL OR @var = \'\' 
RETURN NULL 
RETURN @var 
END  

 

在拼接sql语句的时候这样

 

“update 表a  set a = dbo.my(\'”& a1 & "\'),b = dbo.my(\'" & a2 & "\')"


--  作者:scott518
--  发布时间:2014/5/11 14:38:00
--  
谢谢,这样是否会影响效率,先试试看。
--  作者:scott518
--  发布时间:2014/5/11 16:22:00
--  

此贴怎么乱码了,

谢谢二楼提供的方法,测试过后确实可行,但想请教大家还有没有更直接的方法?