Foxtable(狐表)用户栏目专家坐堂 → [求助]存储过程返回参数的字符串长度上限


  共有53人关注过本帖树形打印复制链接

主题:[求助]存储过程返回参数的字符串长度上限

帅哥哟,离线,有人找我吗?
HBysy
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:婴狐 帖子:25 积分:255 威望:0 精华:0 注册:2023/12/6 9:53:00
[求助]存储过程返回参数的字符串长度上限  发帖心情 Post By:2025/5/21 14:36:00 [只看该作者]

首先是在MS SQL SERVER 2016 数据库中写的存储过程创建语句
CREATE PROCEDURE test
@ReturnJson nvarchar(max) Output
AS
BEGIN
SET NOCOUNT ON;
SELECT @ReturnJson = REPLICATE('a', 10000)
SET NOCOUNT OFF;
END
GO
其次是在狐表中读取该返回参数的VB代码
Dim cmd As New SQLCommand
cmd.CommandText = "test"
cmd.StoredProcedure = True
cmd.Parameters.Add("@ReturnJson", "b", True, 4001) '输出参数
cmd.ExecuteNonQuery
Output.Show(cmd.Parameters("@ReturnJson").ToString.Length)
我发现字符串最大长度为4000 即使是输出参数的size定义成10000 输出的字符串长度也只能是4000
请问4000能否更大?感谢~
[此贴子已经被作者于2025/5/21 14:43:01编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:113936 积分:580301 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2025/5/21 16:45:00 [只看该作者]

应该是个bug,已反馈。

另外,存储过程里用法也不正确,要显示把字符转换为nvarchar(max),否则存储过程最多只能返回8000个字符

SELECT @ReturnJson = REPLICATE(CONVERT(nvarchar(max),'a'), 10000)

临时解决方法
1、按上面方法改正存储过程,使用select语句返回数据,使用cmd.ExecuteReader返回表格数据,通过表格获取数据

2、使用.net的用法,比如:
Dim connectionString As String = "Data Source=.;Initial Catalog=test1;Integrated Security=SSPI;Persist Security Info=False;"

Using connection As New system.Data.SqlClient.SqlConnection(connectionString)
    Try
        ' 打开数据库连接
        connection.Open()
        
        ' 创建 SqlCommand 对象
        Dim command As New system.Data.SqlClient.SqlCommand("test", connection)
        command.CommandType = Data.CommandType.StoredProcedure
        
        ' 添加输入参数
'        Dim inputParam As New SqlParameter("@EmployeeID", SqlDbType.Int)
'        inputParam.Value = 1 ' 假设我们要查找 EmployeeID 为 1 的员工
'        command.Parameters.Add(inputParam)
        
        ' 添加输出参数
        Dim outputParam As New system.Data.SqlClient.SqlParameter("@ReturnJson", Data.SqlDbType.NVarChar, 10000)
        outputParam.Direction = Data.ParameterDirection.Output
        command.Parameters.Add(outputParam)
        
        ' 执行存储过程
        command.ExecuteNonQuery()
        
        ' 获取输出参数的值
        Dim employeeName As String = CType(command.Parameters("@ReturnJson").Value, String)
        Output.Show(employeeName.Length)
    Catch ex As Exception
        Output.Show("Error: " & ex.Message)
    End Try
End Using


 回到顶部