Foxtable(狐表)用户栏目专家坐堂 → 动态sql这句出错不知道为何


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

主题:动态sql这句出错不知道为何

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


加好友 发短信
等级:八尾狐 帖子:1909 积分:16987 威望:0 精华:0 注册:2014/7/29 19:09:00
动态sql这句出错不知道为何  发帖心情 Post By:2018/3/23 12:15:00 [只看该作者]

 --更新库存表数量
        DECLARE my_cursor CURSOR SCROLL FOR SE LECT ckname, datepd FROM #temp1;
        OPEN my_cursor;
        DECLARE @ckname NVARCHAR(16);
        DECLARE @datepd DATETIME;
        FETCH NEXT FROM my_cursor
        INTO @ckname,
            @datepd;
        WHILE @@FETCH_STATUS = 0
        BEGIN
            DECLARE @sql NVARCHAR(MAX);
            SE T @sql
                = ' UPDATE g
       SE T g.合格数量 = ISNULL(实盘合格数量, 0) + ISNULL(合格进出, 0),
          g.待检数量 = ISNULL(实盘待检数量, 0) + ISNULL(待检进出, 0),
          g.不良数量 = ISNULL(实盘不良数量, 0) + ISNULL(不良进出, 0),
          g.报废数量 = ISNULL(实盘报废数量, 0) + ISNULL(报废进出, 0)
       FROM 库存表 g INNER JOIN

........

消息 241,级别 16,状态 1,第 34 行
从字符串转换日期和/或时间时,转换失败。

上面红色那行出错,为什么呢?

谢谢!

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/23 12:22:00 [只看该作者]

改成这样呢?

 

SET @sql = 'abcdefg'

 

SET @sql = "abcdefg"


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


加好友 发短信
等级:八尾狐 帖子:1909 积分:16987 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2018/3/24 8:51:00 [只看该作者]

也不可以,很奇怪,我在很多地方都有类似的使用但不会出错,比如下面
     DECLARE @sql NVARCHAR(MAX);
     SE T @sql
       =  'UPDATE a SE T a.产品编码 = b.ID号,a.品名 = b.品名,a.规格 = b.规格 FROM ' + @tbn
       + ' a
     INNER JOIN dbo.[Sheet1$] b ON b.产品编码 = a.产品编码';
     EXEC sp_executesql @sql;

上面的语句就没有问题,难道是其他语句中有问题,但sql错误提示那行出错?

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106631 积分:542332 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/3/24 9:03:00 [只看该作者]

不是红色代码的问题,是执行@sql变量里面的sql出错。打印@sql变量完整sql分析

select @sql

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


加好友 发短信
等级:八尾狐 帖子:1909 积分:16987 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2018/3/24 9:43:00 [只看该作者]

但是把select @sql 加在EXEC sp_executesql @sql 前面,还没有执行到这句就提示那个错误了,得不到select 的语句,要怎么得到出错的完整的语句呢?

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:106631 积分:542332 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2018/3/24 10:14:00 [只看该作者]

那就是拼接sql出错了

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


加好友 发短信
等级:八尾狐 帖子:1909 积分:16987 威望:0 精华:0 注册:2014/7/29 19:09:00
  发帖心情 Post By:2018/3/24 15:56:00 [只看该作者]

谢谢!总算找到原因了,原来中间有几个地方的条件是 AND a.盘点日期 =  ''' + @datepd + '''  这里变量不能用日期格式,必须转换成字符串
同时因为是动态sql,所以凡是执行出错的都会显示动态sql开始的那行,原来一直没理解

 回到顶部