SQL Server中带{fn}的CONVERT函数失效问题咨询
SQL Server 2019补丁后CONVERT函数报错问题解答
是否为补丁BUG?
不是补丁BUG,问题根源在于冗余的转换操作:
{fn CURRENT_TIMESTAMP()}是ODBC标量函数,在SQL Server中本身就返回DATETIME类型,完全不需要再用CONVERT(DATETIME, ...)做二次转换。- KB5021125补丁可能调整了ODBC函数返回值的字符串格式化逻辑(或受服务器区域/语言设置影响),导致原本冗余的转换操作因字符串格式不匹配触发“值超出范围”错误。之前KB4583458环境中该函数返回的字符串刚好符合
CONVERT默认转换规则,所以没报错,但这属于巧合而非正确用法。
建议直接使用SELECT {fn CURRENT_TIMESTAMP()},或替换为SQL Server原生函数SELECT GETDATE()、SELECT SYSDATETIME()(后者返回DATETIME2类型,精度更高)。
如何查看SQL Server中CONVERT函数的定义?
SQL Server的内置系统函数(如CONVERT)是底层实现,没有公开的可查看T-SQL定义,可通过以下方式获取相关信息:
- 查询系统视图获取元数据:
或SELECT * FROM sys.system_functions WHERE name = 'CONVERT';
能看到函数的所属架构、创建时间等基础信息。SELECT * FROM sys.all_objects WHERE name = 'CONVERT' AND type_desc = 'SQL_SCALAR_FUNCTION'; - 使用
sp_helptext尝试查看:
但内置函数会返回“对象'CONVERT'的文本已加密”,因为系统内置函数的实现是加密存储的。EXEC sp_helptext 'CONVERT'; - 查阅官方文档:可获取
CONVERT函数的参数说明、转换规则、支持的数据类型等完整使用信息。
内容的提问来源于stack exchange,提问作者Sujeet Chaurasia
相关产品推荐
相关产品推荐

