以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  为什么储存过程中的update仅执行了第一条  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=144171)

--  作者:happyft
--  发布时间:2019/12/12 16:51:00
--  为什么储存过程中的update仅执行了第一条
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:test.txt


附件是储存过程的语句,前台调用执行时只有第一个update语句会执行,后面都不执行了

但我重新建立一个sql的查询,完全一样的语句,我把要传递的参数设置为常量后测试
DECLARE @ck NVARCHAR(16) ,
    @strID NVARCHAR(16) ,
    @dateS NVARCHAR(16) ,
    @dateE NVARCHAR(16);
      
SET @ck = \'0108汽配原材料仓\';
SET @strID = \'pd1911-020\';
SET @dateS = \'2019-10-31\';
SET @dateE = \'2019-11-30\';

下面都是与储存过程完全相同的代码
在这个查询中又能正确执行所有的update语句,是什么原因?

谢谢!






--  作者:有点蓝
--  发布时间:2019/12/12 17:03:00
--  
这种代码我没有办法看的,也看不出什么。到SqlServer里面执行有没有问题?
--  作者:HappyFt
--  发布时间:2019/12/12 17:10:00
--  
没有问题,不用祥细看,我只是想问什么原因才会导致只有第一条update语句执行

Dim tbl As Table = Tables("盘点表_主表")
Dim tbl2 As Table  = Tables("盘点表_明细")
Dim pr As Row = tbl.Current
If pr IsNot Nothing Then 
    Dim ds,de As Date
    Dim ck,strID As String
    ck = pr("仓库")
    strID = pr("盘点编号")
    ds = pr("上次盘点日期")
    de = pr("盘点日期")
    Dim cklb2 As String
    Dim cmd As New SQLCommand
    cmd.ConnectionName = Mydata
    cmd.CommandText = "Exec usp_pd_price \'" & ck & "\', \'" & strID & "\',\'" & ds & "\',\'" & de & "\'" 
    cmd.ExecuteNonQuery
end if

前台这样调用也没有什么问题啊

--  作者:有点蓝
--  发布时间:2019/12/12 17:19:00
--  
我看不出是什么原因
--  作者:HappyFt
--  发布时间:2019/12/13 9:18:00
--  
唉,原来不是update没有执行,而是最后一个语句又把更新的数据清空了,
 IF @cklb = \'原材料仓\'
      BEGIN 
      .....
      END
 IF @cklb = \'成品仓\'
     BEGIN 
      .....
      END
 ELSE
      BEGIN 
      .....
      END
现在问题是,上面第一个if执行了,为什么最下面的Else后面的语句也执行了,else应该是上面的if都没执行才执行的啊?
难道储存过程中不能用这样的结构?


--  作者:有点蓝
--  发布时间:2019/12/13 9:28:00
--  
IF @cklb = \'原材料仓\'
      BEGIN 
      .....
      END
ELSE IF @cklb = \'成品仓\'
     BEGIN 
      .....
      END
 ELSE
      BEGIN 
      .....
      END

粉色这段被当做一个整体了