存储过程报错在将nvarchar值\\\'xxx\\\'转换成数据类型int时失败。

前面已经定义了@sDate @eDate的类型是datetime,但执行语句1的话 调用存储过程报错, 而执行语句2就可以正常查询. 这是为什么?怎么解决

大致代码如下, 同样的语句执行结果集1可以正常运行, 就是执行结果集2的时候会报错

-----结果集1

INSERT INTO #JZ_1

SELECT * FROM a

WHERE  1=1 

and j.DATE >= @sDate AND j.DATE < @eDate  AND C.CORP=@CORP

SELECT @l_error =  @@error  

IF @l_error <> 0

BEGIN

ROLLBACK TRAN tran_JZ

RETURN 1

END

-----结果集2

INSERT INTO #JZ_1

SELECT * FROM b

WHERE  1=1 

and j.DATE >= @sDate AND j.DATE < @eDate  AND C.CORP=@CORP

SELECT @l_error =  @@error  

IF @l_error <> 0

BEGIN

ROLLBACK TRAN tran_JZ

RETURN 2

END

IF EXISTS (SELECT 1 FROM #JZ_1 WHERE MD<>0)

BEGIN

INSERT INTO #JZ

select * from #JZ_1

SELECT @l_error =  @@error  

IF @l_error <> 0

BEGIN

ROLLBACK TRAN tran_JZ

RETURN 4

END

END

---查询临时表#JZ

select * from #JZ

DROP TABLE #JZ_1

if @l_trancnt = 0

   commit tran

return 0

set nocount off

微信截图_20220311092309.png

柿柿 发布于 2022-3-11 09:25 (编辑于 2022-3-11 09:30)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共2回答
最佳回答
0
柿柿Lv4见习互助
发布于2022-3-11 10:18

临时表的其中一个字段类型int改为varchar ( 晕了 )

最佳回答
0
Z4u3z1Lv6专家互助
发布于2022-3-11 09:31(编辑于 2022-3-11 09:45)

image.png加引号

补充:创建临时表的时候没有先对字段类型定义,默认就是NVARCHAR,而后面在判断的时候用的int(无引号),把0用引号括起 MD<>'0'

image.png

  • 柿柿 柿柿(提问者) 将字符串转换为 smalldatetime 数据类型时失败。
    2022-03-11 09:37 
  • Z4u3z1 Z4u3z1 回复 柿柿(提问者) 你编辑了问题?看补充
    2022-03-11 09:45 
  • 柿柿 柿柿(提问者) 结果集单独拎出来另外查询也不会报错 就是跟结果集1同时执行就报错 想不通啊..
    2022-03-11 09:45 
  • 柿柿 柿柿(提问者) 结果集 2 单独拎出来
    2022-03-11 09:45 
  • 柿柿 柿柿(提问者) 还是报错, 临时表#JZ_1有定义所有字段的
    2022-03-11 09:53 
  • 0关注人数
  • 527浏览人数
  • 最后回答于:2022-3-11 10:18
    请选择关闭问题的原因
    确定 取消
    返回顶部