Excel - 不显示SQL Server数据库中的varbinary(16)列

时间:2016-07-06 20:50:46

标签: sql-server excel sql-server-2014 type-conversion varbinary

我有一个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查询,命令类型为SQL,命令文本只是存储过程的名称。

它按预期返回数据(几千行),但第一列ID_INT_EXT_KEY(这是几列的散列)除外。该列根本不会被拉入纸张,而不是空白,不会被隐藏。它不在那里。我试着打开行数,想想可能与它有关,但没有。

在SSMS中,列就在那里。

对于我正在使用它的内容来说,这不是一个真正的问题,但它令人困惑,我想知道我能做些什么,而不是改变返回表的数据类型。

编辑:

问题:假设我有一个返回表的存储过程,其中一列是varbinary,是否可以将此列导入Excel (使用标准的外部数据连接),而不创建或修改任何数据库对象?

1 个答案:

答案 0 :(得分:0)

根据您的评论,我将 SSMS转换为十六进制字符串

这不是真的,它只是看起来像一样的HEX-string ...

SSMS具有与Excel相同的问题:如何显示二进制数据? SSMS选择了HEX字符串,但此列的数据类型仍为VARBINARY ...

如果您希望真正的字符串看起来像十六进制值,您可以使用内置函数:

DECLARE @Varbin VARBINARY(16)=0x00112233445566778899AABBCCDDEEFF;
SELECT @Varbin AS A_varbinary_VALUE;
SELECT DATALENGTH(@Varbin);

DECLARE @ConvertedToString NVARCHAR(MAX)= sys.fn_varbintohexstr(@Varbin);
SELECT @ConvertedToString;

更新

由于您的列为VARBINARY(16),因此最好应直接转换为GUID,每个定义为16个字节:

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

你可以把它归还:

SELECT CAST(@CovertedToGUID AS VARBINARY(MAX))

但还有一个问题:为什么?