Sintomas
Se você executar um procedimento armazenado remoto com parâmetros de saída em um servidor vinculado por meio de um driver ODBC para SQL Server, o driver ODBC não poderá recuperar o parâmetro de saída e você poderá receber a seguinte mensagem de erro:
[Microsoft] [ODBC SQL Server Driver]Violação de atributo de tipo de dados restrito
Resolução
Um hotfix com suporte está disponível na Microsoft. No entanto, esse hotfix destina-se a corrigir apenas o problema descrito neste artigo. Aplique esse hotfix somente a sistemas que estão enfrentando esse problema específico. Esse hotfix pode receber testes adicionais. Portanto, se você não for gravemente afetado por esse problema, recomendamos aguardar a próxima atualização de software que contém esse hotfix.
Se o hotfix estiver disponível para download, haverá uma seção "Download de hotfix disponível" na parte superior deste artigo da Base de Dados de Conhecimento. Se esta seção não aparecer, entre em contato com o Serviço de Atendimento ao Cliente e o Suporte da Microsoft para obter o hotfix.
Observação Se ocorrerem problemas adicionais ou se alguma solução de problemas for necessária, talvez seja necessário criar uma solicitação de serviço separada. Os custos usuais de suporte serão aplicados a perguntas e problemas de suporte adicionais que não se qualificam para esse hotfix específico. Para obter uma lista completa de números de telefone de Atendimento ao Cliente e Suporte da Microsoft ou para criar uma solicitação de serviço separada, visite o seguinte site da Microsoft:
http://support.microsoft.com/contactus/?ws=supportObservação O formulário "Download de hotfix disponível" exibe os idiomas para os quais o hotfix está disponível. Se você não vir seu idioma, é porque um hotfix não está disponível para esse idioma.
' A versão em inglês deste hotfix tem os atributos de arquivo (ou posterior) listados na tabela a seguir. As datas e horas desses arquivos são listadas em UTC (tempo universal coordenado). Quando você visualizar as informações sobre os arquivos, elas são convertidas no horário local. Para saber a diferença entre o UTC e o horário local, use a guia Fuso Horário da ferramenta Data e Hora no Painel de Controle.
MDAC 2.7 Service Pack 1
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
Observação Para obter uma lista de todos os hotfixes disponíveis para o MDAC 2.8, clique no seguinte número de artigo para exibir o artigo na Base de Dados de Conhecimento Microsoft:
839801 CORREÇÃO: hotfixes estão disponíveis para o MDAC 2.8
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".
Informações adicionais
Etapas para reproduzir o comportamento
-
Use o código a seguir para criar um SQL Server armazenado com parâmetros de saída em um servidor vinculado:
USE pubs GO CREATE PROCEDURE dbo.sample_stored_procedure @op varchar(20) output AS set @op = 'demo string' return 0 GO
Observação Você não receberá a mensagem de erro listada na seção "Sintomas" se o procedimento armazenado retornar um conjunto de resultados.
-
O código de exemplo do aplicativo Microsoft Visual Basic a seguir acessa o procedimento armazenado remoto em um servidor vinculado. No exemplo de código a seguir, srv1
esrv2 são os dois servidores que estão executando o SQL Server e você está criando srv2 como um servidor vinculado em 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