【问题标题】:ADO Result Set Returning Field as Field LengthADO 结果集以字段长度返回字段
【发布时间】: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


【解决方案1】:

我相信这就是 nchar 的本质。请改用 nvarchar,因为它不会用空格填充数据。这是另一个查看此previous SO discussion 了解更多详细信息。

正如您所提到的,您可以使用 TRIM 函数从现有字符串中删除尾随空格。

【讨论】:

    猜你喜欢
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 2021-09-08
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 2021-07-29
    相关资源
    最近更新 更多