为什么我的tsql varbinary数据被截断了

时间:2013-03-12 00:05:09

标签: sql-server tsql binary truncation

如果我将时区信息从注册表中获取到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'

它返回完整的二进制值

  

'0xE001000000000000C4FFFFFF00000B0000000100020000000000000000000300000002000200000000000000'

但是,如果我将它存储在这样的变量中:

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'

我已经尝试了我能想到的二元/ varbinary和length(包括MAX)的每个排列。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我使用INSERT ... EXEC执行此操作,然后从结果插入的表中读取值:

DECLARE @TzKey nvarchar(512)
DECLARE @TZI binary(85) 
Set @TzKey = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\Pacific Standard Time'
declare @Results table (Value sysname,Data varbinary(300))
insert into @Results
EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE', @TzKey, 'TZI' --, @TZI OUTPUT
select @TZI = Data from @Results

(插入关于使用/依赖无证程序的常见警告)