Sql server 2008 为什么使用表达式的数据类型SByte的变量的值为0?
我试图在运行时直接使用变量上的表达式将一些SBYTE类型的变量设置为null。变量的作用域是控制流 为什么变量的计算结果是0而不是null?如何将其设置为空Sql server 2008 为什么使用表达式的数据类型SByte的变量的值为0?,sql-server-2008,ssis,bids,Sql Server 2008,Ssis,Bids,我试图在运行时直接使用变量上的表达式将一些SBYTE类型的变量设置为null。变量的作用域是控制流 为什么变量的计算结果是0而不是null?如何将其设置为空 这是因为SSIS变量不能为NULL。奇怪的是,我在中找不到任何明确表示它们不能为NULL,它只是说 用户定义变量的值可以是文字或表达式 但是一个(旧的)说法是“如果SSIS变量支持空值…”这本书: 在SSI中,变量不能设置为NULL。相反,每个变量都包含数据 类型在没有值的情况下保留默认值 事实上,如果你只计算NULL(DT_UI1)你会得
这是因为SSIS变量不能为
NULL
。奇怪的是,我在中找不到任何明确表示它们不能为NULL
,它只是说
用户定义变量的值可以是文字或表达式
但是一个(旧的)说法是“如果SSIS变量支持空值…”这本书:
在SSI中,变量不能设置为NULL
。相反,每个变量都包含数据
类型在没有值的情况下保留默认值
事实上,如果你只计算NULL(DT_UI1)
你会得到零;计算NULL(DT_BOOL)
得到False
;计算NULL(DT\U日期)
给出12/30/1899 12:00:00 AM
使用表达式将变量设置为
NULL
也不起作用:如果创建Int32
变量,将evaluatesExpression
设置为True
并输入值NULL(DT_UI4)
,则会出现错误“属性值无效”,并显示详细消息“NULL(DT_UI4)”不是Int32的有效值。“很好的解释。我想我可以删除需要设置为null的变量,并在SQL语句中对其进行操作,对吗?是的,如果可能的话,我会将逻辑保留在SQL中(不知道包逻辑是什么)。就我个人而言,除非绝对必要,否则我尽量避免使用表达式,因为构建和调试表达式非常麻烦,而且很容易被忽略(“忘记”可能更准确)。但是它们肯定有它们的用途,所以不要犹豫,在它们有用的地方使用它们。