为什么我必须在存储过程中进行转换

时间:2010-11-10 14:07:40

标签: tsql

在我的存储过程中

为什么我必须将课程转换为varchar(不写完整的存储过程) 虽然我的DB中的course_id是int类型,但在转换后它可以正常工作

@course int =null,
    SET @query = @query + 'Where course_id='+ cast(@course as varchar)

3 个答案:

答案 0 :(得分:5)

VARCHAR + INT表达式中,VARCHARINT的隐含,而不是SELECT '12' + 345

此查询:

357

将返回'12345',而不是SELECT 'ab' + 1 ,而这一个:

'ab1'

将失败而不是返回{{1}}

如果你想要字符串连接,你应该使用你正在做的显式转换。

答案 1 :(得分:2)

因为当您使用动态SQL时,sql字符串需要是字符串数据类型,并且您不能在不转换int的情况下将int连接到字符串。你必须将int作为一个字符串,然后将其添加到字符串SQL查询的其余部分

答案 2 :(得分:1)

或者,您可以将变量定义为varchar以开始。

如果此变量可以为null,那么您也会遇到问题,因为连接到字符串的null是null。