从存储过程返回的varchar(max)输出参数被截断为4000个字符。

14 浏览
0 Comments

从存储过程返回的varchar(max)输出参数被截断为4000个字符。

我有一个使用SQL2012数据库的经典ASP应用程序。最近,我将一个表的列从varchar(8000)更改为varchar(max),因为它的容量不足以存储所需的数据。

我可以用所有需要存储的数据更新该列,但是我用于将列数据作为输出参数返回的存储过程只返回4000个字符(至少根据以下代码的结果是这样的:

Len(cmd.Parameters("@detail").Value)

在调用存储过程时,我使用以下参数声明的一部分:

cmd.Parameters.Append cmd.CreateParameter("@detail", 8, 2, -1, strDetail)

其中8是adBStr的值。我尝试将8更改为200、201和203,但是会出现以下错误:

错误:800a0e7c

描述:

参数对象定义有误。提供了不一致或不完整的信息。

我以为更新数据是困难的部分,但我无法弄清楚如何检索整个列的内容。

我返回的列的DATALENGTH为10,536,但通过输出参数只返回了4000个字符,包括空格。我可以从Visual Studio中看到所有的数据(10k个字符),所以我知道它在其中。

我的连接字符串是Provider=SQLOLEDB.1。这可能会有问题吗?我应该使用更新的SQL Server Native Client 11.0 OLE DB提供程序 - SQLNCLI11吗?

有人有什么想法吗?

谢谢,

Mike。

0
0 Comments

问题原因:

问题出现的原因是使用了错误的连接字符串(SQLOLEDB.1),导致返回的varchar(max)输出参数被截断到4000个字符。

解决方法:

要解决这个问题,需要使用SQL Server Native Client代替SQLOLEDB.1来支持varchar(max)和nvarchar(max)数据类型,否则它们将被截断成SQLOLEDB等效的数据类型。

解决方法如下:

1. 使用SQL Server Native Client替代SQLOLEDB.1来建立连接。

2. 使用以下参数定义:

- 对于varchar(max)输出参数,使用以下代码:

Call cmd.Parameters.Append(cmd.CreateParameter("", adLongVarChar, adParamOutput, -1, strDetail))

- 对于nvarchar(max)输出参数,使用以下代码:

Call cmd.Parameters.Append(cmd.CreateParameter("", adLongVarWChar, adParamOutput, -1, strDetail))

其中,adLongVarChar = 201,adLongVarWChar = 203,adParamOutput = 2。

通过以上的解决方法,可以避免返回的varchar(max)输出参数被截断到4000个字符的问题。

0