似乎在这里有一个明确的答案。复制到这里:
元数据是根据源列和SELECT列表中使用的表达式确定的。以下是规则:
1.
例如,使用内置函数(例如SUBSTRING,LEFT,RIGHT等)的任何表达式(ISNULL除外)都被引擎视为可为NULL。因此,如果您使用CAST(somecol
as char(8)),则表达式可以为NULLable
文字,常量,全局变量(如@@ DBTS,@@ ERROR等)被视为不可为空,因为它们总是返回一些值
如果expression是一个列,则从源列元数据中得出可为空性
因此,要使SELECT列表中的表达式或列不为null,请在该列或表达式周围使用ISNULL。
因此,看起来您可以安全使用CAST表达式。



