sql-server - 为什么我的 tsql varbinary 数据被截断

标签 sql-server t-sql 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'

我已经尝试了我能想到的所有binary/varbinary 和长度(包括MAX)的排列。

有什么想法吗?

最佳答案

我会使用 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

(插入有关使用/依赖未记录程序的常见警告)

关于sql-server - 为什么我的 tsql varbinary 数据被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15350958/

相关文章:

java - 尝试使用Python从遗留软件解析文件(mmp格式)

bash - 使用标准 Linux 命令行工具修改二进制文件中的字节

c# - InsertAllOnSubmit 只插入第一条数据记录

c# - ServiceStack中的用户认证

sql-server - 将 MS Access 2000 转换为 2010

t-sql - 根据 T-SQL 中多个相关记录的排序顺序对记录进行排名?

sql - 在子查询中访问别名

sql-server - SQL简单按数量分割

SQL 沿列移动数据

包含二进制可执行文件的 Bash 脚本