0

我有一个 SQL 2008 服务器,服务器中有一个表,该表有一个数据类型为 varchar(MAX) 的列。我正在尝试使用 ADO 将此表中的某些列导入 Excel 2010。这是我正在使用的代码示例:

Dim con As Object
Set con = CreateObject("ADODB.Connection")

cmd.CommandText = "SELECT dbo.(Table Name).Name From dbo.(Table)"
cmd.CommandType = 1
con.open
cmd.ActiveConnection = con
Dim rst as Object
set rst = cmd.Execute

ActiveSheet.cells(targetRange.Row, targetRange.Column).CopyFromRecordset rst

代码执行得很好,但是因为列 Name 设置为 varchar(MAX),所以工作表中没有显示任何名称。我知道这一点是因为我制作了 SQL 服务器的副本并将列的数据类型更改为 varchar(1024) 并且它以应有的方式工作。

我还尝试将记录集中的数据手动放入电子表格中,但没有成功。所以问题是我不能改变真正的 SQL 服务器。

是否有我可以添加到 Select 语句的命令或我可以使用的强制转换将 varchar(MAX) 转换为 Excel 可以使用的数据类型,或者我可以做些什么来使数据不当我读入它时为空?

我一直在研究这个问题一天,一些线程即将关闭,但他们正在谈论在 SQL 服务器上使用 select 并使用在这种情况下不起作用的强制转换,或者在其他一些程序中,这没有帮助.

4

1 回答 1

-1

ADO 显然没有VARCHAR(MAX)正确处理(或您可能期望的方式),关于返回零列大小的东西,因为它没有像VARCHAR(n).

您回答了自己的问题,因为您只需要将列转换为具有定义长度的内容!

CAST(column AS type)

或者在你的情况下

SELECT CAST(dbo.(Table Name).Name AS VARCHAR(1024)) FROM dbo.(Table)
于 2013-03-14T20:07:35.513 回答