Длина выходного параметра в sqlsrv - 01004 (усеченные данные) - PullRequest
0 голосов
/ 22 апреля 2020

Я сохранил процедуры на SQL сервере, который выводит данные как xml тип данных. Когда я пытаюсь получить выходной параметр в PHP с PHP драйвером для SQL сервера (расширение sqlsrv) и длина строки превышает 4000, я получаю ошибку SQL (SQLSTATE 01004 (усеченные данные)) .

Вот краткий пример:

Хранимая процедура:

CREATE PROCEDURE pr_getlargexml
    @xml xml OUTPUT
AS
    BEGIN
        SET NOCOUNT ON;

        SET @xml =
            (
                SELECT *
                FROM   largeTable
                FOR XML RAW, ELEMENTS, TYPE, ROOT('xml')
            );
    END;
GO

PHP код:

$serverName = "localhost\SQL2012TEST";
$connectionInfo = array("Database" => "TEST", "UID" => "", "PWD" => "");
$conn = sqlsrv_connect($serverName, $connectionInfo);

if ($conn === false) {
    die(print_r(sqlsrv_errors(), true));
}
$retval = '';
$query = sqlsrv_query($conn, 'EXEC pr_getlargexml  ?',array(array(&$retval,SQLSRV_PARAM_OUT,SQLSRV_PHPTYPE_STRING('UTF-8'),SQLSRV_SQLTYPE_XML)));
if ($query === false) {
    die(print_r(sqlsrv_errors(), true));
}

echo "";
\var_dump($retval);
echo "
";

Если xml короче 4000, он работает нормально. Я также пытался использовать nvarchar(max) в качестве типа данных в sql и SQLSRV_SQLTYPE_NVARCHAR('max') в php в качестве sqltype, но я получаю ту же ошибку.

У кого-нибудь есть решение моей проблемы?

...