如何使用SELECT INTO语句生成特定类型的NULL值?
如何通过SELECT INTO创建特定类型的NULL值
直接写NULL AS [DateFixed]的问题在于,SQL Server会自动推断这个列的数据类型,但结果可能不是你需要的(比如可能是int或者varchar),而你后续要用来填充SysUtcDateTime()的结果,所以得明确指定NULL的目标类型,以下是几种可行的方法:
用CAST/CONVERT强制转换NULL的类型
这是最直观的方式,直接把NULL转换成你需要的类型(比如datetime2,和SysUtcDateTime()的返回类型匹配):SELECT Thing.Id, Thing.SomeValue AS [BadValue], CAST(NULL AS datetime2) AS [DateFixed] INTO ThingValueFixBackup FROM Thing WHERE SomeValue IS WRONG SOMEHOW;用CASE语句绑定目标函数的类型
通过一个永远不成立的条件,让SQL Server根据SysUtcDateTime()的类型来定义列,实际返回NULL:SELECT Thing.Id, Thing.SomeValue AS [BadValue], CASE WHEN 1=0 THEN SysUtcDateTime() ELSE NULL END AS [DateFixed] INTO ThingValueFixBackup FROM Thing WHERE SomeValue IS WRONG SOMEHOW;用NULLIF匹配目标类型
利用NULLIF函数的特性,传入两个相同的SysUtcDateTime()值,返回NULL的同时让列类型继承函数的返回类型:SELECT Thing.Id, Thing.SomeValue AS [BadValue], NULLIF(SysUtcDateTime(), SysUtcDateTime()) AS [DateFixed] INTO ThingValueFixBackup FROM Thing WHERE SomeValue IS WRONG SOMEHOW;
核心思路就是让SQL Server明确知道这个NULL列的目标数据类型,避免自动推断带来的后续类型兼容问题,其中CAST的方式最容易理解和维护。
内容的提问来源于stack exchange,提问作者Jack Deeth
相关产品推荐
相关产品推荐

