【发布时间】:2014-12-21 23:30:19
【问题描述】:
我正在从 SQL Server (2008 R2) 存储过程生成记录集,该存储过程在 excel VBA 中填充 ComboBox。
如果我运行查询以获取从表返回的每个值的长度,它看起来像这样:
SELECT [outcome], LEN([outcome]) AS [Length] FROM [dbo].[crl_outcome] GROUP BY [outcome]
在执行存储过程时,我将记录集分配给一个变体数组,例如:
varList = oRS.GetRows()
MsgBox Len(varList(1, 0))
MsgBox 将上面 SQL 语句中显示的字段返回表中的 21 个字符长度为 128 个字符,其余 107 个字符由空格组成。
如您所见,没有对值进行格式化,但表中的字段指定为nchar(128)。
有谁知道为什么每个结果的末尾都附加了空格?
【问题讨论】:
-
我相信这就是
nchar的本质。请改用nvarchar,因为它不会用空格填充数据。我认为。 -
我同意 Doug 的观点,即您需要使用 nvarchar 来避免填充。如果您在查询中使用 DATALENGTH 函数而不是 LEN(删除尾随空格),我想您会发现返回的长度是 256,这是实际数据长度(以字节为单位),因为 Unicode 使用每个字符 2 个字节。
-
是的,同意。 Char 和 nchar 填充字符串
-
@DougGlancy 感谢您的帮助,这成功了。将其粘贴到答案中并乐于接受 - 可能需要在答案中注明现有记录需要修剪以删除填充。
标签: sql-server excel vba ado recordset