症状
如果通过用于SQL Server的 ODBC 驱动程序在链接服务器上运行具有输出参数的远程存储过程,则 ODBC 驱动程序无法检索输出参数,并且可能会收到以下错误消息:
[Microsoft][ODBC SQL Server驱动程序]受限数据类型属性冲突
解决方法
Microsoft 提供了支持的修补程序。 但是,此修补程序旨在仅更正本文中所述的问题。 仅将此修补程序应用于遇到此特定问题的系统。 此修补程序可能会收到其他测试。 因此,如果未受到此问题的严重影响,建议等待包含此修补程序的下一个软件更新。
如果修补程序可供下载,则本知识库文章顶部有“可用修补程序下载”部分。 如果未显示此部分,请联系 Microsoft 客户服务和支持部门获取修补程序。
请注意,如果出现其他问题或需要进行任何故障排除,则可能需要创建单独的服务请求。 通常的支持成本将适用于其他支持问题和不符合此特定修补程序条件的问题。 有关 Microsoft 客户服务和支持人员电话号码的完整列表或创建单独的服务请求,请访问以下 Microsoft 网站:
http://support.microsoft.com/contactus/?ws=support请注意,“可用修补程序下载”窗体显示修补程序可用的语言。 如果看不到语言,这是因为该语言不提供修补程序。
此修补程序的英文版本具有下表中列出的文件属性 (或更高版本) 。 这些文件的日期和时间在协调的通用时间 (UTC) 中列出。 在查看文件信息时,文件时间将转换为本地时间。 若要查找 UTC 与本地时间之间的差异,请在控制面板中的“日期和时间”工具中使用时区选项卡。
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
请注意,有关 MDAC 2.8 可用的所有修补程序的列表,请单击以下文章编号以查看 Microsoft 知识库中的文章:
839801修复:修补程序适用于 MDAC 2.8
状态
Microsoft 已确认这是在“适用范围”部分中列出的 Microsoft 产品存在的问题。
更多信息
重现行为的步骤
-
使用以下代码在链接服务器上创建具有输出参数的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