我有一个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
代码执行得很好,但是因为列名设置为varchar(MAX),所以工作表中都没有显示任何名称。我知道这是因为我制作了SQL服务器的副本,并将列的数据类型更改为varchar(1024),并且它的工作方式应该如此。
我还尝试将记录集中的数据手动放入电子表格中,但没有运气。所以问题是我无法改变真正的SQL服务器。
是否有一个命令我可以添加到Select语句或我可以使用的转换器,它将varchar(MAX)转换为Excel可以使用的数据类型,或者是否还有其他我可以做的以便当我读到数据时,数据不为空?
我一直在研究这个问题,现在有一些线程关闭,但是他们正在谈论在SQL服务器上使用select,在这种情况下使用的模型不适用,或者在其他程序中使用没帮忙。
答案 0 :(得分:0)
ADO显然无法正确处理VARCHAR(MAX)
(或者您可能会如何预期),有关返回零列大小的内容,因为它未像VARCHAR(n)
那样定义。
您回答了自己的问题,因为您只需要将列转换为具有已定义长度的列!
CAST(column AS type)
或在你的情况下
SELECT CAST(dbo.(Table Name).Name AS VARCHAR(1024)) FROM dbo.(Table)