Проблемы
При запуске удаленной хранимой процедуры с выходными параметрами на связанном сервере с помощью драйвера ODBC для SQL Server драйвер ODBC не может получить выходной параметр и может появиться следующее сообщение об ошибке:
[Майкрософт] [Драйвер ODBC SQL Server]Нарушение атрибута ограниченного типа данных
Решение
Поддерживаемое исправление доступно корпорацией Майкрософт. Однако это исправление предназначено только для устранения проблемы, описанной в этой статье. Примените это исправление только к системам, в которых возникла эта проблема. Это исправление может получить дополнительное тестирование. Поэтому, если эта проблема серьезно не затрагивает вас, рекомендуется дождаться следующего обновления программного обеспечения, содержащего это исправление.
Если исправление доступно для скачивания, в верхней части этой статьи базы знаний есть раздел "Доступно скачивание исправлений". Если этот раздел не отображается, обратитесь в службу поддержки клиентов Майкрософт, чтобы получить исправление.
Обратите внимание, что при возникновении дополнительных проблем или необходимости устранения неполадок может потребоваться создать отдельный запрос на обслуживание. Обычные затраты на поддержку будут применяться к дополнительным вопросам поддержки и вопросам, которые не подходят для этого исправления. Полный список номеров телефонов службы поддержки и обслуживания майкрософт или создания отдельного запроса на обслуживание см. на следующем веб-сайте Майкрософт:
http://support.microsoft.com/contactus/?ws=supportОбратите внимание, что в форме "Доступно скачивание исправлений" отображаются языки, для которых доступно исправление. Если язык не отображается, исправление недоступно для этого языка.
' В версии этого исправления на английском языке есть атрибуты файла (или более поздней версии), перечисленные в следующей таблице. Даты и время для этих файлов перечислены в формате UTC. При просмотре сведений о файлах выполняется перевод соответствующих значений в местное время. Чтобы найти разницу между временем в формате UTC и локальным временем, используйте вкладку "Часовой пояс" в средстве "Дата и время" в панель управления.
MDAC 2.7 с пакетом обновления 1 (SP1)
Date Time Version Size File name
----------------------------------------------------------
12-Nov-2002 02:42 2000.81.9031.12 24,576 Odbcbcp.dll
12-Nov-2002 02:41 2000.81.9031.12 385,024 Sqlsrv32.dll
MDAC 2.8
Date Time Version Size File name
---------------------------------------------------------
15-Jun-2004 00:22 2000.85.1045.0 28,672 Dbnmpntw.dll
15-Jun-2004 00:21 2.80.1045.0 147,456 Msadds.dll
15-Jun-2004 00:21 2.80.1045.0 512,000 Msado15.dll
15-Jun-2004 00:21 2.80.1045.0 163,840 Msadomd.dll
15-Jun-2004 00:21 2.80.1045.0 184,320 Msadox.dll
15-Jun-2004 00:21 2.80.1045.0 53,248 Msadrh15.dll
15-Jun-2004 00:21 2.80.1045.0 225,280 Msdaora.dll
15-Jun-2004 00:21 2.80.1045.0 147,456 Msdart.dll
15-Jun-2004 00:21 2.575.1045.0 139,264 Msorcl32.dll
15-Jun-2004 00:21 3.525.1045.0 221,184 Odbc32.dll
15-Jun-2004 00:22 2000.85.1045.0 24,576 Odbcbcp.dll
15-Jun-2004 00:21 2.80.1045.0 442,368 Oledb32.dll
15-Jun-2004 00:21 2000.85.1045.0 503,808 Sqloledb.dll
15-Jun-2004 00:21 2000.85.1045.0 401,408 Sqlsrv32.dll
15-Jun-2004 00:08 2000.85.1045.0 208,896 Sqlxmlx.dll
Обратите внимание на список всех исправлений, доступных для MDAC 2.8, щелкните следующий номер статьи, чтобы просмотреть статью в базе знаний Майкрософт:
839801 ИСПРАВЛЕНИЕ: исправления доступны для MDAC 2.8
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Дополнительная информация
Действия по воспроизведению поведения
-
Используйте следующий код, чтобы создать SQL Server хранимую процедуру с выходными параметрами на связанном сервере:
USE pubs GO CREATE PROCEDURE dbo.sample_stored_procedure @op varchar(20) output AS set @op = 'demo string' return 0 GO
Обратите внимание, что сообщение об ошибке, указанное в разделе "Симптомы", не отображается, если хранимая процедура возвращает результирующий набор.
-
В следующем примере кода приложения Microsoft Visual Basic выполняется доступ к удаленной хранимой процедуре на связанном сервере. В следующем примере кода srv1
иsrv2 — это два сервера, на которых выполняется SQL Server, и вы создаете srv2 как связанный сервер на srv1.Dim cn As new ADODB.Connection Dim cmd As new ADODB.Command Dim prm As ADODB.Parameter cn.Open "Driver={SQL Server};Server=srv1;UID=sa;PWD=sa_password;" cmd.ActiveConnection = cn cmd.CommandType = adCmdStoredProc cmd.CommandText = "srv2.pubs.dbo.sample_stored_procedure" Set prm = cmd.CreateParameter("op", adVarChar, adParamOutput, 20) cmd.Parameters.Append prm cmd.Execute Debug.Print prm.Value cn.Close Set cn = Nothing