记录的字段值从SQL Server返回null用VARCHAR(MAX)数据类型(Recordset

2019-10-29 08:05发布

我有一个SQL 2008服务器,在该服务器是具有与VARCHAR的数据类型(MAX)一列的表。 我想从这个表中导入某些列到Excel 2010中使用ADO。 下面是我使用的代码示例:

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可以使用强制命令,或者是有什么我可以做,这样的数据不空,当我在看过吗?

我一直在寻找这个问题一天与一些线程来接近,但他们都在谈论使用select有投SQL服务器,即没有在这种情况下工作,或者在其他一些项目上,这不利于。

Answer 1:

ADO显然不处理VARCHAR(MAX)正确(或你怎么可能指望),东西长约返回零柱尺寸为它不是这样定义这将是一个VARCHAR(n)

你回答了你自己的问题,因为你只需要你列一个定义的长度投的东西!

CAST(column AS type)

或者你的情况

SELECT CAST(dbo.(Table Name).Name AS VARCHAR(1024)) FROM dbo.(Table)


文章来源: Recordset field values return null from SQL server with varchar(MAX) data type