【发布时间】:2013-03-12 00:05:09
【问题描述】:
如果我从注册表中获取我的时区信息到 SQL 中,我将获得完整的 TZI 数据结构:
DECLARE @TzKey nvarchar(512)
Set @TzKey = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time'
EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE', @TzKey, 'TZI'
它返回完整的二进制值
'0xE0010000000000000C4FFFFFF00000B0000000100020000000000000000000300000002000200000000000000'
但是,如果我将它存储在这样的变量中:
DECLARE @TzKey nvarchar(512)
DECLARE @TZI binary(85)
Set @TzKey = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time'
EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE', @TzKey, 'TZI', @TZI OUTPUT
然后SELECT @TZI AS TzInfo 返回'0xE001'
我已经尝试了所有我能想到的 binary/varbinary 和长度(包括 MAX)的排列。
有什么想法吗?
【问题讨论】:
-
xp_regread是一个未记录的存储过程 - 但也许输出参数仅用于返回smallint值,并且在内部(在某些时候)该值被截断为 16 位。不管你给它什么类型的变量,它只会在那个参数中给你 16 位。
标签: sql-server tsql binary truncation