我今天在一些源代码中发现了这个:
SELECT
@Error = ERROR_NUMBER (),
@ErrorMsg = N'An Error occured while populating the TABLE ' + @DestinationTableName +
N' with data. Error Code: ' + CAST ( @Error AS nvarchar(20) ) +
N', Error Description: "' + ERROR_MESSAGE () + N'".'
+ NCHAR(0X0D) + NCHAR(0X0A) + NCHAR(0X0D) + NCHAR(0X0A),
@ErrorSeverity = ERROR_SEVERITY (),
@ErrorState = ERROR_STATE () ;
看起来错误消息字符串在描述后添加了两个换行符。0X0D 是 13,0X0A 是 10。
是否有理由使用十六进制而不仅仅是整数?
通常我所做的是 NCHAR(13) + NCHAR(10)...
是的,有明显的可读性原因。对于程序员来说,十进制数字是没有意义的。到底是
3221225477
什么?但是0xc0000005
你马上就认出来了。2147500037
?不响铃,但0x80004005
uberwellknown。这些是带有意义的值,你每天在调试器中看到它们后一眼就能认出它们……它成为第二天性。不,我不是在开玩笑,也不是在讽刺。我很认真。我也会使用 0x0D 和 0x0A。如果我看到 13,我将不得不考虑这是什么值。
就像您在问题中所说的那样,这些值是等效的,因此没有任何理由或差异。它只是使用的基数(十六进制 [base 16] 与十进制 [base 10])。
这是它们相等的证明:
所以,回答你的问题: 不,没有理由使用十六进制而不是十进制值。 传统上,对于位图和位运算,使用十六进制进行视觉位数学运算要容易得多,但这显然不是原始开发人员使用此代码的意图背后的驱动力。
另请参阅BOL 关于 NCHAR 的参考资料: