小编Chr*_*ice的帖子

在存储过程中运行时 CAST 抛出错误,但作为原始查询运行时则不会

这里正在发生一些非常奇怪的事情。

我有一个看起来像这样的查询。

SELECT CAST(FT.DOP AS SMALLINT) FROM TRACKING_DATA WHERE date > @mydate and identifier = 0000000000
Run Code Online (Sandbox Code Playgroud)

当作为原始查询运行时,它返回数据就好了。

当我把它放在一个改变 where 子句的存储过程中时,它会抛出这个错误。

Msg 244, Level 16, State 2, Procedure myprocedure, Line 107 [Batch Start Line 2]
The conversion of the varchar value '58629' overflowed an INT2 column. Use a larger integer column.
Run Code Online (Sandbox Code Playgroud)

所以这就是奇怪的地方。我用这样的查询遍历了那个 where 子句的所有可能数据。

SELECT DISTINCT DOP FROM TRACKING_DATA where identifier = 000000000000
Run Code Online (Sandbox Code Playgroud)

SELECT DISTINCT CAST(DOP AS smallint) FROM TRACKING_DATA where identifier = 000000000000
Run Code Online (Sandbox Code Playgroud)

这就是我得到的回报。

17
12
9
19
8 …
Run Code Online (Sandbox Code Playgroud)

sql-server stored-procedures sql-server-2012

8
推荐指数
2
解决办法
1441
查看次数