Если я получу время данные зоны из реестра в 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), что я могу думать.
Любые идеи?
' xp_regread' является недокументированной хранимой процедурой, но, возможно, выходной параметр всегда использовался для возврата значений «smallint», а внутри (в какой-то момент) значение усекается до 16 бит. Неважно, какой тип переменной вы ему даете, он всегда будет давать вам 16 бит в этом параметре. –