【问题标题】:Moving from text to varchar(MAX): Are there any troubles to expect with MS Access?从文本转移到 varchar(MAX):MS Access 有什么问题吗?
【发布时间】:2011-12-20 04:51:31
【问题描述】:

众所周知,使用 SQL Server 后端的 MS Access 应用程序 (MDB) 在处理某些数据类型时会遇到问题。例如,

我们现在正在考虑从 text/ntext 字段转移到 varchar(MAX)/nvarchar(MAX) 字段,as recommended by Microsoft:

ntext、text 和 image 数据类型将在 Microsoft SQL Server 的未来版本中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用 nvarchar(max)、varchar(max) 和 varbinary(max)。

我们这样做会遇到麻烦吗?

【问题讨论】:

    标签: sql-server ms-access sqldatatypes


    【解决方案1】:

    我知道这是一篇较旧的帖子,但我认为它仍然与某些人相关。我经常处理遗留数据,这些数据从 Access 备注字段扩展到 SQL,然后在 Access 中转换为链接表。

    我发现缩放到 NVARCHAR(max) 确实会导致链接表出现问题。根据您使用哪个驱动程序构建 Access Link 表,问题会有所不同。

    使用 SQL Native Client 10,我的第一个发现是 Access 将字段视为 NVARCHAR(4000)。虽然使用 SQL Server 作为驱动程序确实改变了问题,但仍然存在问题。有了这个老司机,问题似乎更难追查,但确实出现了。通常有类似的尺寸问题。

    当心,看起来运行正常的东西,实际上可能只是运行正常,因为还没有遇到正确的环境。

    如果您发现您的字段数据从不需要超过 4000 个字符,则将其设为 NVARCHAR(4000)。如果你只需要 4000,设置为 MAX 就过分了。

    【讨论】:

      【解决方案2】:

      我们处于相同的情况:MS-Access 前端,SQL Server 后端。我们已经将所有新字段创建为 nvarchar(max) 而不是 ntext,在用户端没有任何问题。由于我们不使用文本或图像字段类型,因此我不能对它们说任何话。

      【讨论】:

        【解决方案3】:

        在工作中,我们也有相同的设置(Access 2003 前端,SQL Server 2005 后端),我们完全按照您的要求进行:

        我们的 SQL Server 表包含 text/ntext 列,我们将它们更改为 varchar(max)/nvarchar(max)
        我们根本没有遇到任何问题,如果我没记错的话,我们甚至不必重新链接 Access 中的表......它就可以工作了。

        【讨论】:

          【解决方案4】:

          我们最近确实发现了一个陷阱。问题是不能向链接表的 varbinary 字段写入超过 8000 个字节,即使该字段定义为 varbinary(MAX)。

          证明:varbinary(MAX) on linked tables

          【讨论】:

            【解决方案5】:

            这是 JStevens 对 answer 的附录。

            较新的 SQL Server ODBC 驱动程序将 VARCHAR(MAX) 限制为 8000 个字符。尝试通过链接的 ODBC 表输入更多文本会导致此 ODBC 错误:

            [Microsoft][ODBC Driver 17 for SQL Server]字符串数据,右截断(#0)

            它适用于古老的 {SQL Server} 驱动程序,或数据类型 TEXT
            令人惊讶的是,它也适用于NVARCHAR(MAX)

            这些发现适用于 Access 2010 或 2016 以及 SQL Server 2008 R2。

            +--------------------+--------------+---------------------------------+
            | Data type \ Driver | {SQL Server} | {ODBC Driver 17 for SQL Server} |
            +--------------------+--------------+---------------------------------+
            | VARCHAR(MAX)       | ok           | ODBC Error                      |
            | NVARCHAR(MAX)      | didn't try   | ok                              |
            | TEXT               | ok           | ok                              |
            +--------------------+--------------+---------------------------------+
            

            因此,如果您需要插入更多数据,则必须选择毒药。

            {SQL Server} 对我来说不是一个选项,例如因为它不支持DATE 数据类型。

            所以我坚持使用TEXT,并希望“ntext、text 和 image 数据类型将在 SQL Server 的未来版本中被删除”。只是一个empty threat

            Necro 编辑:NVARCHAR(MAX) 似乎没有新的 ODBC 驱动程序的 8000(或 4000)字符限制。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-08-14
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-06-03
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多