Исправление: Сообщение об ошибке при выполнении пользовательской функции в SQL Server 2005: «Недопустимая длина параметр, передаваемый функции SUBSTRING» или «транспортного уровня произошла ошибка при получении результатов с сервера»

Номер ошибки: 1209 (исправление SQL)
Номер ошибки: 443526 (SQLBUDT)
Номер ошибки: 1209 (исправление SQL)ошибка #: 443526 (SQL BU отслеживания дефектов)номер ошибки: 61538 (Content Maintenance)

Корпорация Майкрософт распространяет исправления Microsoft SQL Server 2005 как один загружаемый файл. Так как исправления являются накопительными, каждый выпуск содержит все исправления и все исправления, входившие в состав предыдущих SQL Server 2005 исправление выпуска.

В статье описываются следующие о выпуске исправлений:

  • Проблемы, устраняемые с помощью данного пакета исправлений

  • Необходимые условия для установки пакета исправлений

  • Сведения о необходимость перезагрузки компьютера после установки пакета исправлений

  • Сведения о ли исправление заменяется другими исправлениями

  • Сведения о ли необходимо внести изменения в реестр

  • Файлы, содержащиеся в пакете исправлений

Симптомы

При выполнении пользовательской функции в SQL Server 2005 появляется сообщение об ошибке. Эта проблема возникает, если перед выполнением определяемую пользователем функцию, выполните следующую инструкцию:

SET FMTONLY ON

Появляется другое сообщение об ошибке, в зависимости от версии SQL Server 2005, после установки. Если используется Пакет обновления 1 (SP1) для SQL Server 2005, возможно возникновение и других неполадок.

В исходной версии SQL Server 2005

При выполнении пользовательской функции в исходной версии SQL Server 2005, появляется следующее сообщение об ошибке.

Сообщение 536, уровень 16, состояние 5, строка 4
Недопустимая длина параметра, передаваемого функции SUBSTRING.

SQL Server 2005 с пакетом обновления 1

При выполнении пользовательской функции в SQL Server 2005 SP1, возникают следующие проблемы:

  • Появляется следующее сообщение об ошибке:

    Сообщение 109, уровень 20 0, состояние строки 0
    Произошла ошибка уровня транспорта при получении результатов с сервера. (поставщик: поставщик памяти, ошибка общих: 0 - канал был закрыт.)

  • Останавливает службу SQL Server.

  • В файл Errorlog SQL Server регистрируется следующее нарушение прав доступа.

    SqlDumpExceptionHandler: 53 процесса создается неустранимое исключение c0000005 EXCEPTION_ACCESS_VIOLATION. SQL Server завершает этот процесс.

Решение

Сведения о пакете обновления

Чтобы устранить эту проблему, получите последний пакет обновления для SQL Server 2005. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:

913089 как получить последний пакет обновления для SQL Server 2005

Сведения об исправлении

Существует исправление от корпорации Майкрософт. Однако данное исправление предназначено для устранения только проблемы, описанной в этой статье. Применяйте данное исправление только в тех системах, которые имеют данную проблему. Это исправление может проходить дополнительное тестирование. Таким образом если вы не подвержены серьезно этой проблеме, рекомендуется дождаться следующего пакета обновления, содержащего это исправление.

Если исправление доступно для скачивания, имеется раздел "Пакет исправлений доступен для скачивания" в верхней части этой статьи базы знаний. Если этот раздел не отображается, обратитесь в службу поддержки для получения исправления.

Примечание. Если наблюдаются другие проблемы или необходимо устранить неполадки, вам может понадобиться создать отдельный запрос на обслуживание. Стандартная оплата за поддержку будет взиматься только за дополнительные вопросы и проблемы, которые не соответствуют требованиям конкретного исправления. Полный список телефонов поддержки и обслуживания клиентов корпорации Майкрософт или создать отдельный запрос на обслуживание посетите следующий веб-узел корпорации Майкрософт:

http://support.microsoft.com/contactus/?ws=supportПримечание. В форме "Пакет исправлений доступен для скачивания" отображаются языки, для которых доступно исправление. Если нужный язык не отображается, значит исправление для данного языка отсутствует.

Предварительные условия

SQL Server 2005 Пакет обновления 1 (SP1) для установки этого исправления необходимо иметь.

Дополнительные сведения о том, как получить Пакет обновления 1 для SQL Server 2005, щелкните следующий номер статьи базы знаний Майкрософт:

913089 как получить последний пакет обновления для SQL Server 2005

Сведения о перезагрузке компьютера

Необходимо перезапустить службу SQL Server после установки данного исправления.

Сведения о реестре

Не требуется внесение изменений в реестр.

Сведения о файлах

Данное исправление содержит только файлы, которые необходимы для устранения описанных в этой статье перечислены. Это исправление может содержать не все файлы, которые необходимы для полного обновления продукта до последней сборки.

Английская версия данного исправления содержит атрибуты файла (или более поздние атрибуты файлов), приведенные в следующей таблице. Дата и время для этих файлов указаны в формате общего скоординированного времени (UTC). При просмотре сведений о файле, он преобразуется в локальное время. Чтобы узнать разницу между временем по Гринвичу и местным временем, откройте вкладку Часовой пояс элемента "Дата и время" панели управления.

Имя файла

Версия файла

Размер файла

Дата

Время

Платформа

Hauresourcedb.ldf

Неприменимо

524,288

17-Aug-2006

10:39

Неприменимо

Hauresourcedb.mdf

Неприменимо

39,911,424

17-Aug-2006

10:39

Неприменимо

Logread.exe

2005.90.2183.0

398,112

17-Aug-2006

14:13

x86

Microsoft.analysisservices.adomdclient.dll

9.0.2183.0

543,520

17-Aug-2006

14:13

x86

Microsoft.analysisservices.deployengine.dll

9.0.2183.0

138,016

17-Aug-2006

14:12

x86

Microsoft.analysisservices.dll

9.0.2183.0

1,215,264

17-Aug-2006

14:13

x86

Microsoft.sqlserver.mgdsqldumper.dll

2005.90.2183.0

75,552

17-Aug-2006

14:11

x86

Microsoft.sqlserver.sqlenum.dll

9.0.2183.0

908,064

17-Aug-2006

14:13

x86

Msgprox.dll

2005.90.2183.0

197,920

17-Aug-2006

14:11

x86

Msmdlocal.dll

9.0.2183.0

15,703,840

17-Aug-2006

14:13

x86

Msmdredir.dll

9.0.2183.0

3,968,800

17-Aug-2006

14:14

x86

Replprov.dll

2005.90.2183.0

547,616

17-Aug-2006

14:13

x86

Replrec.dll

2005.90.2183.0

782,112

17-Aug-2006

14:12

x86

Sqlaccess.dll

2005.90.2183.0

347,936

17-Aug-2006

14:13

x86

Sqlagent90.exe

2005.90.2183.0

319,264

17-Aug-2006

14:12

x86

Sqlservr.exe

2005.90.2183.0

28,959,064

17-Aug-2006

14:13

x86

Sysdbupg.sql

Неприменимо

192,346

19-Jul-2006

09:02

Неприменимо

Template_hauresourcedb.ldf

Неприменимо

524,288

17-Aug-2006

10:39

Неприменимо

Template_hauresourcedb.mdf

Неприменимо

39,911,424

17-Aug-2006

10:39

Неприменимо

Xpstar90.dll

2005.90.2183.0

292,640

17-Aug-2006

14:16

x86

Xpstar90.rll

2005.90.2183.0

152,864

17-Aug-2006

14:12

Неприменимо

Если это исправление не опубликовано для загрузки (то есть в этой статье отсутствует общедоступный URL-адрес этого исправления), распространения требуется ведущего технического специалиста, члена группы распространения или руководителя и справедливы следующие утверждения:

  • Чтобы получить исправление, клиенты должны столкнуться с ошибкой, описанной в разделе «Проблема».

  • Необходимо отследить всех клиентов, для отправки и предоставить им следующий пакет обновления, когда он станет доступным (если выпущен пакет обновления).

Это исправление планируется включить в Пакет обновления 2 для SQL Server 2005.

В разделе «Решение» указано, доступно ли это исправление в исправлении или в последнем пакете обновления. Для сравнения и тестирования оригинальное исправление доступно на веб-узле http://hotfix .

Заметки в службу технической поддержки: Чтобы получить построения 2183, посетите следующий веб-узел корпорации Майкрософт:

http://hotfixВ поле Поиск в базе Знаний введите 924291и нажмите кнопку Перейти.

Временное решение

Чтобы обойти эту проблему, измените параметр SET FMTONLY OFF перед выполнением определяемой пользователем функции.

Статус

Корпорация Майкрософт подтвердила, что это является проблемой в продуктах Майкрософт, перечисленных в разделе «Относится к». Впервые Эта ошибка была исправлена в Пакет обновления 2 для SQL Server 2005.

Дополнительные сведения

Дополнительные сведения о схеме именования для обновления Microsoft SQL Server щелкните следующий номер статьи базы знаний Майкрософт:

Новая схема присвоения имен 822499 для программного обеспечения Microsoft SQL Server пакетами обновления

Для получения дополнительных сведений о терминологии обновлений программного обеспечения щелкните следующий номер статьи базы знаний Майкрософт:

Описание 824684 Стандартные термины, используемые при описании обновлений программных продуктов Майкрософт

Данные дампа стека

В SQL Server 2005 SP1 появится следующие сведения дампа стека:

2006-08-16 19:30:37.61 spid54      * Short Stack Dump2006-08-16 19:30:37.62 spid54      014718DE Module(sqlservr+004718DE)
2006-08-16 19:30:37.62 spid54 0108B032 Module(sqlservr+0008B032)
2006-08-16 19:30:37.62 spid54 0108B066 Module(sqlservr+0008B066)
2006-08-16 19:30:37.62 spid54 014680F2 Module(sqlservr+004680F2)
2006-08-16 19:30:37.62 spid54 01BDF9D2 Module(sqlservr+00BDF9D2)
2006-08-16 19:30:37.62 spid54 014688D5 Module(sqlservr+004688D5)
2006-08-16 19:30:37.62 spid54 01023E34 Module(sqlservr+00023E34)
2006-08-16 19:30:37.62 spid54 0136764A Module(sqlservr+0036764A)
2006-08-16 19:30:37.62 spid54 013674C1 Module(sqlservr+003674C1)
2006-08-16 19:30:37.62 spid54 01367356 Module(sqlservr+00367356)
2006-08-16 19:30:37.62 spid54 01BF2102 Module(sqlservr+00BF2102)
2006-08-16 19:30:37.62 spid54 01381DA5 Module(sqlservr+00381DA5)
2006-08-16 19:30:37.62 spid54 01023E34 Module(sqlservr+00023E34)
2006-08-16 19:30:37.62 spid54 01041DD5 Module(sqlservr+00041DD5)
2006-08-16 19:30:37.62 spid54 0103DFD4 Module(sqlservr+0003DFD4)
2006-08-16 19:30:37.62 spid54 01006A96 Module(sqlservr+00006A96)
2006-08-16 19:30:37.62 spid54 01006BBC Module(sqlservr+00006BBC)
2006-08-16 19:30:37.62 spid54 01006DAB Module(sqlservr+00006DAB)
2006-08-16 19:30:37.62 spid54 01447562 Module(sqlservr+00447562)
2006-08-16 19:30:37.62 spid54 0144859B Module(sqlservr+0044859B)
2006-08-16 19:30:37.62 spid54 0144789A Module(sqlservr+0044789A)
2006-08-16 19:30:37.64 spid54 01447720 Module(sqlservr+00447720)
2006-08-16 19:30:37.64 spid54 781329AA Module(MSVCR80+000029AA)
2006-08-16 19:30:37.65 spid54 78132A36 Module(MSVCR80+00002A36)

sqlservr!CMsqlXactImp::ClearAllUpdateSequenceMarkers+0x3b (CONV: thiscall)
sqlservr!CMsqlXactImp::RollbackInternal+0x3a (CONV: thiscall)
sqlservr!CMsqlXactImp::Rollback+0x31 (CONV: thiscall)
sqlservr!CAutoMsqlXact::RollbackNestedXact+0x1b (FPO: [0,0,0]) (CONV: thiscall)
sqlservr!CExecuteStatement::RollbackNestedXact+0x14 (FPO: [1,0,0]) (CONV: thiscall)
sqlservr!CExecuteStatement::FinishNormalImp+0x8c (CONV: thiscall)
sqlservr!CExecuteStatement::FinishOnExceptionImp+0x13 (CONV: thiscall)
sqlservr!CMsqlExecContext::FExecute+0x65c (CONV: thiscall)
sqlservr!CSQLSource::Execute+0x73b (CONV: thiscall)
sqlservr!process_request+0x2e3 (CONV: stdcall)
sqlservr!process_commands+0x2e0 (CONV: stdcall)
sqlservr!SOS_Task::Param::Execute+0xe2 (CONV: thiscall)
sqlservr!SOS_Scheduler::RunTask+0xb9 (CONV: thiscall)
sqlservr!SOS_Scheduler::ProcessTasks+0x141 (CONV: stdcall)
sqlservr!SchedulerManager::WorkerEntryPoint+0x1a8 (CONV: stdcall)
sqlservr!SystemThread::RunWorker+0x7f (CONV: thiscall)
sqlservr!SystemThreadDispatcher::ProcessWorker+0x225 (CONV: thiscall)
sqlservr!SchedulerManager::ThreadEntryPoint+0x143 (CONV: stdcall)
msvcr80!_callthreadstartex+0x1b (FPO: [Non-Fpo]) (CONV: cdecl)
msvcr80!_threadstartex+0x66 (FPO: [Non-Fpo]) (CONV: stdcall)

Действия по воспроизведению проблемы

Следующая инструкция выполняется в среде SQL Server Management Studio.

create function StrConcatBack(@S varchar(255)
,@SEP varchar(50) = '/'
,@PART int
)
returns varchar(255)
as
begin

declare @I int
,@RSLT varchar(255)

select @I=charindex(@SEP,@S)

if @I>0 begin
if @PART=1
select @RSLT=left(@S,@I-1)
else
if @PART=2
select @RSLT=right(@S,Len(@S)-@I)
end
else if @PART=1 select @RSLT=@S

return @RSLT

end
GO
--#######################################################
GO
create function StrConcatBackPk
(@S varchar(255)
,@SEP varchar(50) = '/'
,@PART int
)
returns bigint
as
begin
declare
@RESULT bigint
select @RESULT=cast(NullIf(dbo.StrConcatBack(@S,@SEP,@PART),'') as bigint)
return @RESULT

end
GO
--#######################################################
GO
SET FMTONLY ON
declare
@CURR_ID bigint
select @CURR_ID=dbo.StrConcatBackPk(' ',default,1 )
SET FMTONLY OFF
go

Слова для запросов

Нарушение прав доступа FMTONLY UDF

Автор: matteote
Разработчик документации: v-cjiang
Технический редактор: matteote; eriki; qianl
Редактор: v-smohun

Нужна дополнительная помощь?

Совершенствование навыков
Перейти к обучению
Первоочередный доступ к новым возможностям
Присоединение к программе предварительной оценки Майкрософт

Были ли сведения полезными?

Спасибо за ваш отзыв!

Благодарим за отзыв! Возможно, будет полезно связать вас с одним из наших специалистов службы поддержки Office.

×