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

Tsql 为什么我必须在存储过程中进行转换,tsql,Tsql,在我的存储过程中 为什么我必须将课程强制转换为varchar(不编写完整的存储过程) 虽然我在DB中的课程id是int类型的,但在强制转换后它可以正常工作,原因可能是什么 @course int =null, SET @query = @query + 'Where course_id='+ cast(@course as varchar) 在VARCHAR+INT表达式中,VARCHAR隐式转换为INT,反之亦然 此查询: SELECT '12' + 345 将返回357,而不是

在我的存储过程中

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

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

VARCHAR+INT
表达式中,
VARCHAR
隐式转换为
INT
,反之亦然

此查询:

SELECT  '12' + 345
将返回
357
,而不是
'12345'
,而此:

SELECT  'ab' + 1
将失败,而不是返回
'ab1'


如果需要字符串连接,您应该使用显式强制转换,这正是您所要做的。

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


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

不,我正在检查这个isNull属性,比如@course不是null,那么varchar也可以保存int类型的值?当然可以,您需要确保只从应用程序端向它发送int,因为如果您使用varchar也可以接受的像“a”这样的值填充它,查询将失败。因此,我们的complete将始终是字符串形式,不是吗?我还想知道varchr只用于字符串类型,所以在我的数据库中还有一个混淆,类型当然是int,我正在将它与字符串类型进行比较,它是如何实现的work@Novice:请张贴这是一个单独的问题,注释并不是一个合适的地方。但是先生,一个困惑是,当我将@course转换为varchar类型时,为什么int数据类型列值和字符串类型值进行比较