Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 无法查询Access 2010中的nVarChar(Max)字段_Sql Server_Ms Access_Nvarchar - Fatal编程技术网

Sql server 无法查询Access 2010中的nVarChar(Max)字段

Sql server 无法查询Access 2010中的nVarChar(Max)字段,sql-server,ms-access,nvarchar,Sql Server,Ms Access,Nvarchar,已经使用堆栈溢出作为资源数百次,但我的第一次张贴了一些帮助问题 我在SQLServer2005中有一个表,其中包含4个nVarChar(Max)字段。 我试图使用ADO 2.8从Access(2010)VBA模块中提取数据 我正在使用SQL驱动程序SQLNCLI10进行连接 (我不能使用链接表,因为我最终要查询的“表”是表值函数) 然后,当我打印/使用记录集时,数据会变得混乱,并与同一记录中的其他字段连接在一起,同时会抛出一堆模糊的字符 VBA:(尝试了各种其他方法,结果相同) 示例输出: Se

已经使用堆栈溢出作为资源数百次,但我的第一次张贴了一些帮助问题

我在SQLServer2005中有一个表,其中包含4个nVarChar(Max)字段。 我试图使用ADO 2.8从Access(2010)VBA模块中提取数据 我正在使用SQL驱动程序SQLNCLI10进行连接

(我不能使用链接表,因为我最终要查询的“表”是表值函数)

然后,当我打印/使用记录集时,数据会变得混乱,并与同一记录中的其他字段连接在一起,同时会抛出一堆模糊的字符

VBA:(尝试了各种其他方法,结果相同)

示例输出:

SeqNo: 1
CommandID: 2
Parameter1:     2 Daily Report    é [& some other chars not showing on here]
Parameter2: [Null]
Parameter3: [Null]
Parameter4: [Null]
Description: Daily Report
Active: False
预期产出:

SeqNo: 1
CommandID: 2
Parameter1: SELECT  Day_Number  ,Day_Text  ,Channel_Group_ID [...etc]
Parameter2: [Null]
Parameter3: [Null]
Parameter4: [Null]
Description: Daily Report
Active: False
因此,它从其他字段中获取数据位,而不是正确的数据(在本例中,它是一条SQL语句)

然后我尝试在源代码中将nvarchar(max)字段转换为文本

创建的视图:

    CREATE VIEW TestWithCast 
    AS
    SELECT jd.JobID, jd.SeqNo, jd.CommandID
    ,cast(jd.Parameter1 as text) as Parameter1
    ,cast(jd.Parameter2 as text) as Parameter2
    ,cast(jd.Parameter3 as text) as Parameter3
    ,cast(jd.Parameter4 as text) as Parameter4
    ,jd.[Description]
    ,jd.Active

    FROM JobDetail jd
现在,我最初在这里有一些运气-使用与上面相同的代码确实会带回数据-但是当我在主代码中使用此代码时(跳入和跳出其他过程);一旦我查询了记录集的第一个结果,它就会删除其余的记录/字段,并将它们设置为Null。我还尝试将每个字段的值设置为一个变量,同时在获取下一条记录之前运行其余的vba,但这也没有帮助

感觉上,我几乎需要将记录集转储到本地访问表中,然后从那里进行查询——这是一个bazaar解决方案,它已经是一个解决方案(通过强制转换为文本)

我发现这里完全缺少一些东西,或者我真的需要转换为文本并加载到本地表吗

谢谢你的帮助,我快疯了

另外,希望我提供了正确的详细信息-如果我遗漏了任何关键信息,请告诉我

编辑:

哎呀,我想我已经做了/发现了问题。。。 我将驱动程序更改为SQLSRV32(v6.01)-并且似乎可以直接针对文本铸造字段正常工作。 所以为什么它可以使用旧的驱动程序,而不能使用新的“推荐”驱动程序(我阅读了各种来源)。 而且。。。在本机客户端上使用它会有很大的缺点吗

编辑2:

好的,我在一些机器上尝试了一些驱动程序,在每种情况下都使用文本转换和直接到VARCHAR MAX

[在我的windows 7计算机上,带SQLSMS 2008]

SQL本机客户端10.0-这两种方法都不能可靠地使用此驱动程序 SQL Server 6.01-这两种方法似乎都工作可靠-但还需要进一步测试

[在我们的生产服务器上w/SQLS 2005]

SQL本机客户端(v2005.90)-根本不适用于varchar(max),但适用于文本转换 SQL Server(v2008.86)-这两种方法似乎都工作可靠-不过还需要进一步测试


这将使部署变得有趣

这不是一个真正的答案,因为我没有测试它,但是。。。您正在连接中使用“DataTypeCompatibility=80”参数。据我所知,DataTypeCompatibility=80指的是SQL Server 2000,其中nvarchar(max)字段类型仍然没有实现。

我遇到了同样的问题,通过将字段转换为nvarchar(1000)解决了这个问题。如果1000个字符足够的话,这将是一个简单、兼容的解决方案。

值得一试:停止使用
SELECT*
(),命名您的列并最后命名
NVARCHAR(MAX)
。这可能是从中带出的。谢谢Aaron-仅使用Select*作为示例-通常没有那么邋遢!我确实尝试过使用字段顺序,但所有4个“参数”字段都是nvarchar(max)——在每条记录上填充不同的字段——有时只有一个,有时全部。(附言,有趣的文章,谢谢——通读一遍)哦,好的,读过去。还有,你为什么要使用MARS?如果我不包括数据类型,它根本不起作用-我没有该字段的数据。火星探测器不需要,我想当我第一次让它接近工作状态时,它就在那里,从未起飞过。现在已删除但保留了DataTypeCompatibility=90(对于2005年的SQL Server),甚至100(对于2008年的SQL Server),具体取决于您的服务器。感谢Philippe,它没有改变行为,但已根据所使用的数据库更新为“90”。我一直在从2005年(现在是2008年)请求此类字段服务器通过SQLOLEDB连接(Provider=SQLOLEDB.1),多年来没有任何问题。
    CREATE VIEW TestWithCast 
    AS
    SELECT jd.JobID, jd.SeqNo, jd.CommandID
    ,cast(jd.Parameter1 as text) as Parameter1
    ,cast(jd.Parameter2 as text) as Parameter2
    ,cast(jd.Parameter3 as text) as Parameter3
    ,cast(jd.Parameter4 as text) as Parameter4
    ,jd.[Description]
    ,jd.Active

    FROM JobDetail jd