使用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个字符后被切断。我确实读过有关此限制的内容。有没有办法避免它(某种解决方法)?