我试图使用链接服务器将数据从Oracle提取到pointer-events: none;
数据库。
MSSqlserver
但它失败了以下错误:
链接服务器“LINK_NAME”的OLE DB提供程序“OraOLEDB.Oracle” 为列提供了不一致的元数据。 “COLUMN_NAME”栏 (编译时序号6)对象“”SCHEMA“。”表“”被报告给 在编译时具有100的“LENGTH”,在运行时具有200的“LENGTH”。
我还需要在运行时传递参数where where condition。我发现OPENQUERY是一个解决方案,但它在运行时不支持参数。
答案 0 :(得分:1)
尝试使用OPENQUERY语法来查看是否有帮助..
SELECT * FROM OPENQUERY(LINK_NAME, 'SELECT * FROM db.Schema.Table')
有关OPENQUERY ...
的更多信息答案 1 :(得分:1)
我找到了解决方案:
由于数据库列类型不匹配导致错误。
ORACLE 正在使用NVARCHAR
作为数据类型,但在 SQLSERVER 的情况下,它是VARCHAR
。
由于 NVARCHAR 是 VARCHAR 的两倍,这就是显示尺寸不匹配错误的原因。
将数据类型更改为同样适用于我。
答案 2 :(得分:0)
我找到了this blogger发布的解决方案。试试吧!
来自Sysinternals / Mark Russinovich的这个工具是最好的,我唯一的遗憾是那天没有推出它而不是淘到谷歌并且疯了。我将Procmon限制为仅仅sqlservr.exe,因为它是加载/处理提供程序而不是ssms.exe的SQL服务本身。另外值得注意的是,sqlservr.exe是64位进程,而管理工作室仍然只有32位。由于服务器服务正在加载提供程序,并且服务进程为64位,因此提供程序也必须以64位格式提供。
ODAC112021Xcopy_x64.zip已安装到C:\ Oracle。然而,Procmon向我展示的是,sqlservr试图在任何文件夹中找到oci.dll但是他的! (它遍历%Path%sysvariable)。当它最终放弃查找dll时,SQL服务处于不稳定的状态,停止服务的唯一方法是通过taskmgr / procexp将其终止。显然,我可以看到“xcopy”部署 - 虽然没有给我任何错误消息 - 它也没有设置PATH变量!这就是这篇文章的真正含义......将C:\ Oracle和C:\ Oracle \ Bin添加到Path变量中,或者可能是在过程中使用调查工具而不是依赖于您的搜索引擎技能。
sqlservr.exe现在可以找到相关的DLL了。根目录中的OCI.DLL和Bin子文件夹中的OraOLEDB11.DLL。此时我可以查询数据库!如果您按照上述步骤操作并仍然遇到相同的错误,我强烈建议您使用Procmon.exe,而不是跳转到下一个搜索结果。
完整帖子为here,其中包含更多详细信息。