【发布时间】:2016-11-09 01:40:05
【问题描述】:
我有一个 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 (使用标准外部数据连接),不创建或修改任何数据库对象?
【问题讨论】:
-
A
VARBINARY(16)是一种不 可见 或 - 更好的措辞 - 可显示 的数据类型...有 16 个字节的东西。您希望 Excel 应该如何处理这个问题?您可以将其转换为十六进制字符串(由 0-9 和 A 到 H 组成,并且主要以0x开头来表示这一点。您可以将其转换为base64或者将其转换为 16 字节长度的类型一个相当随机的值...糟糕的 Excel 应该如何处理该值? -
嗯,SSMS 将其转换为十六进制字符串,正如您所建议的那样。我有一种感觉,这与该列包含二进制数据的事实有关。这告诉我为什么会发生这种情况,但是我可以做些什么来解决它而不求助于修改数据库对象? IE。我可以从 Excel 做些什么来将此列显示为十六进制值?
-
我刚刚更新了我的问题...
标签: sql-server excel sql-server-2014 type-conversion varbinary