【发布时间】:2018-05-22 19:10:14
【问题描述】:
我在 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 小一,但这是我能输入的最大数字而不会出错。
但是当我从asp执行存储过程并输出这3个值时:
Response.Write(CStr(objSP.Parameters("StrLen")) + "<br/>")
Response.Write(CStr(Len(objSP.Parameters("Str"))) + "<br/>")
Response.Write(objSP.Parameters("Str"))
我得到了存储过程创建的实际长度 (>4000)、4000 和一个截断的字符串。
我怎样才能得到整个字符串?
【问题讨论】:
-
不要将数据类型更改为 TEXT。 @MohsinMehmood TEXT 数据类型已被弃用,取而代之的是 varchar(max) 近 15 年了。
-
@MohsinMehmood:这是非常糟糕的建议 -
TEXT数据类型已弃用,应该不使用无论如何 - 不要建议这个 - 请! -
这行得通(尽管在我的环境中我必须使用 SQLNCLI10)!谢谢@SearchAndResQ!我成功测试到 12549 个字符。
标签: sql-server stored-procedures sql-server-2012 asp-classic