从text移到varchar(MAX):MS Access是否有任何问题?

时间:2011-11-02 10:30:41

标签: sql-server ms-access sqldatatypes

众所周知,使用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)。

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

5 个答案:

答案 0 :(得分:2)

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

我发现扩展到NVARCHAR(max)确实会在链接表中引起问题。根据您使用哪个驱动程序构建Access Link表,问题会有所不同。

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

请注意,似乎运行正常的事实上可能只是正确运行,因为正确的环境还没有被击中。

如果您发现您的字段数据永远不需要超过4000个字符,请将其设为NVARCHAR(4000)。如果你只需要4000,那么设置为MAX就会被杀死。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

好吧,我们最近肯定陷入了困境。问题是,即使字段定义为varbinary(max),也不能将超过8000个字节写入链表的varbinary字段。

证明:varbinary(MAX) on linked tables

答案 4 :(得分:1)

这是JStevens对answer的附录。

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

  

[Microsoft] [用于SQL Server的ODBC驱动程序17]字符串数据,右截断(#0)

它可以与古老的{SQL Server}驱动程序或数据类型TEXT一起使用。

这些发现与Access 2010或2016和SQL Server 2008 R2有关。

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

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

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

因此,我坚持使用TEXT,希望“将来的SQL Server版本中将删除ntext,text和image数据类型”。只是empty threat