众所周知,使用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)。
我们这样做会遇到麻烦吗?
答案 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字段。
答案 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。