在我的存储过程中
为什么我必须将课程转换为varchar(不写完整的存储过程) 虽然我的DB中的course_id是int类型,但在转换后它可以正常工作
@course int =null,
SET @query = @query + 'Where course_id='+ cast(@course as varchar)
答案 0 :(得分:5)
在VARCHAR + INT
表达式中,VARCHAR
是INT
的隐含,而不是SELECT '12' + 345
。
此查询:
357
将返回'12345'
,而不是SELECT 'ab' + 1
,而这一个:
'ab1'
将失败而不是返回{{1}}
如果你想要字符串连接,你应该使用你正在做的显式转换。
答案 1 :(得分:2)
因为当您使用动态SQL时,sql字符串需要是字符串数据类型,并且您不能在不转换int的情况下将int连接到字符串。你必须将int作为一个字符串,然后将其添加到字符串SQL查询的其余部分
答案 2 :(得分:1)
或者,您可以将变量定义为varchar以开始。
如果此变量可以为null,那么您也会遇到问题,因为连接到字符串的null是null。