2013-03-12 2 views
2

Если я получу время данные зоны из реестра в SQL, я получаю полную структуру данных ТЗИ:Почему мои данные TSQL VARBINARY получать усечен

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 и длины (в том числе и MAX), что я могу думать.

Любые идеи?

+0

' xp_regread' является недокументированной хранимой процедурой, но, возможно, выходной параметр всегда использовался для возврата значений «smallint», а внутри (в какой-то момент) значение усекается до 16 бит. Неважно, какой тип переменной вы ему даете, он всегда будет давать вам 16 бит в этом параметре. –

ответ

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 

(Вставка обычных предостережений об использовании/опираясь на недокументированных процедур)

+0

Спасибо за предложение - он может работать. Я дам вам знать ... – user2158889

+0

@ user2158889 - Правда? Какую версию вы используете (первоначально протестированная на SQL Server 2012. Только что протестирована в 2005 году)? (И я сначала проверил проблему усечения, используя ваш оригинальный скрипт, так что это не какая-то общая разница между нашими машинами) –

+0

Отлично работает, спасибо! – user2158889

 Смежные вопросы

  • Нет связанных вопросов^_^