Delphi,使用nvarchar(max)输出参数读取SQL Server存储过程

时间:2016-10-04 20:47:45

标签: sql-server delphi stored-procedures nvarchar

使用Delphi XE7和SQL Server 2008.我有一个如下所示的存储过程:

ALTER PROCEDURE [dbo].[uspUsers_GetAll]
    @ReturnData nvarchar(max) = NULL OUTPUT
AS
BEGIN
    SET NOCOUNT ON;

    SET @ReturnData = CONVERT(nvarchar(max),
                    (SELECT *, (SELECT UserID, RightType
                                FROM UserRights
                                WHERE UserRights.UserID = Users.ID
                                FOR XML RAW('UserRight'), 
                                ROOT('UserRights'), ELEMENTS, TYPE)
                     FROM Users
                     FOR XML RAW('Users'), ROOT('root') , ELEMENTS));
END;

我想要做的是将所有用户及其权限返回到转换为字符串的xml中。关键是在客户端,将读取字符串并将其转换为XML文档。

我使用TADOStoredProc执行存储过程,如下所示:

  uspAdoWork.Close;

  if uspAdoWork.Prepared then
     uspAdoWork.Prepared := False;

  uspAdoWork.Parameters.Clear;
  uspAdoWork.ProcedureName := 'uspUsers_GetAll';
  uspAdoWork.Parameters.Refresh;
  uspAdoWork.Prepared := True;

  dmApp.uspAdoWork.ExecProc;

  RetXML := uspAdoWork.Parameters.ParamByName('@ReturnData').Value;

我的问题是返回的值在4000个字符后被切断。我确实读过有关此限制的内容。有没有办法避免它(某种解决方法)?

0 个答案:

没有答案