从SQL Server存储过程返回字符串被截断?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (207)

我在IIS 7.5上运行使用传统ASP和SQL Server 2012的网站。该网站是数据驱动的,我使用存储过程来创建HTML文本字符串以呈现网页。但是从存储过程传回的字符串正被截断为4000个字符。我如何保持截断?

详细信息:我的存储过程定义为:

CREATE PROCEDURE [dbo].[spCourseButtonsDisplay]
    @str NVARCHAR(MAX) OUTPUT

存储过程中的字符串连接使用cast(我在某处读取,这将防止截断):

SET @str = CAST(@str + ... AS nvarchar(MAX));

最后,我回到:

RETURN len(@str)

请注意,我可以在SQL Server Management Studio中执行存储过程,并获得超过4000的字符串(我已使用> 12000进行了测试)。但在asp中不是这样。

我在我的asp代码中定义存储过程参数:

.Parameters.Append .CreateParameter("StrLen", 3, 4)  'adInteger, adParamReturnValue
.Parameters.Append .CreateParameter("Str", 202, 2, 2147483646)   'adVarWChar, adParamOutput

2147483646比MAX小1,但却是我能够毫无误差地放下的最大数字。

但是当我从asp执行存储过程并输出这3个值时:

Response.Write(CStr(objSP.Parameters("StrLen")) + "<br/>")
Response.Write(CStr(Len(objSP.Parameters("Str"))) + "<br/>")
Response.Write(objSP.Parameters("Str"))

我得到存储过程创建(> 4000),4000和截断字符串的实际长度。

我怎样才能得到整个字符串?

提问于
用户回答回答于

我将连接字符串从更改Provider=SQLOLEDB.1;Provider=SQLNCLI10;。我已成功通过> 12000个字符的测试。请小心使用适当版本的SQL Server Native Client(SQLNCLI11,SQLNCLI10或SQLNCLI)。

用户回答回答于

扫码关注云+社区

领取腾讯云代金券