Excel – 不显示来自SQL Server数据库的varbinary(16)列

我有一个SQL Server 2014存储过程作为数据连接添加到Excel 2013工作簿。

存储过程返回一个定义如下的表:

create table #rollups ( ID_INT_EXT_KEY varbinary(16) not null, AS_OF_DATE date not null, FOR_MONTH int not null, FOR_YEAR int not null, FINAL_REPORT_DEPT varchar(100) null, PROV_NAME varchar(100) null, EXTERNAL_FLAG bit not null, YTD_VISITS decimal(15,2) not null default 0, YTD_CHARGED decimal(15,2) not null default 0, YTD_PROCS decimal(15,2) not null default 0, MTD_VISITS decimal(15,2) not null default 0, MTD_CHARGED decimal(15,2) not null default 0, MTD_PROCS decimal(15,2) not null default 0, YTD_VISITS_DIFFLASTMONTH decimal(15,2) not null default 0, YTD_CHARGED_DIFFLASTMONTH decimal(15,2) not null default 0, YTD_PROCS_DIFFLASTMONTH decimal(15,2) not null default 0 ); -- insert data to the temp table -- select from the temp table 

我没有存储过程的问题,它按预期工作。

我已经将它添加到Excel工作表中,作为OLE DB查询,命令types是SQL,命令文本只是存储过程的名称。

它按照预期返回数据(几千行),除了第一列ID_INT_EXT_KEY(这是几列的散列)。 该列根本不会被拉入表单,而不是空白的,而不是隐藏的。 只是不在那里。 我试着打开行号,也许这跟它有关系,但没有。

在SSMS列是在那里。

这并不是真正的问题,但它是令人困惑的,我想知道我能做些什么,而不是改变返回的表的数据types。

编辑:

问题 :鉴于我有一个存储过程返回一个表,其中一列是一个varbinary, 有没有办法让这个列到Excel (使用标准的外部数据连接), 而不创build或修改任何数据库对象?

从你的评论我把SSMS转换成hexstring

这不是真的,它看起来像一个hex的string…

SSMS有相同的问题,Excel会有:如何显示二进制数据? SSMSselectHEXstring,但该列的数据types仍为VARBINARY …

如果你想得到一个看起来像hex值真正的string,你可以使用内置函数:

 DECLARE @Varbin VARBINARY(16)=0x00112233445566778899AABBCCDDEEFF; SELECT @Varbin AS A_varbinary_VALUE; SELECT DATALENGTH(@Varbin); DECLARE @ConvertedToString NVARCHAR(MAX)= sys.fn_varbintohexstr(@Varbin); SELECT @ConvertedToString; 

UPDATE

因为你的列是VARBINARY(16)最好应该是直接转换为GUID ,每个定义为16个字节:

 DECLARE @CovertedToGUID UNIQUEIDENTIFIER=CAST(@Varbin AS UNIQUEIDENTIFIER); SELECT @CovertedToGUID; 

你可以回过头来

 SELECT CAST(@CovertedToGUID AS VARBINARY(MAX)) 

但还剩下一个问题:为什么呢?