在sql Server中,两种不同类型之间的比较是这样进行的:
优先级较低的数据类型将转换为优先级较高的数据类型
接下来,将优先级较低的类型强制转换为优先级较高的类型
然后在优先级较高的类型的原始值和优先级较低的类型的转换后的值之间进行比较
为了便于讨论:将INT
(优先级16,高)和a VARCHAR
(优先级27,低)进行比较,方法是将VARCHAR
to强制转换为toINT
,然后将两者进行比较。
在您的情况下,虽然没有发生任何转换,因为发生的情况是该@course
值被附加到了动态构造的上@sql
。不用说,那是不好的。正确的解决方案是将@course
as作为参数传递给动态sql调用:
@course INT = null ... SET @query = @query + 'Where course_id= @course'; ... exec sp_executesql @sql, '@course int', @course;
@H_419_41@这是:
解决方法
我有以下存储过程,没有编写完整的存储过程,但其中一些是:
@course int = null,SET @query = @query + 'Where course_id='+ cast(@course as varchar)
我想知道何时我将@course转换为VARCHAR类型,而course_id
数据库中的我是INT类型-比较如何进行?
@course int = null,SET @query = @query + 'Where course_id='+ cast(@course as varchar)
这是:
我有以下存储过程,没有编写完整的存储过程,但其中一些是:
我想知道何时我将@course转换为VARCHAR类型,而course_id
数据库中的我是INT类型-比较如何进行?
这是: