SQL Server 视图无法通过 ODBC 获得(逆向工程师)

Posted

技术标签:

【中文标题】SQL Server 视图无法通过 ODBC 获得(逆向工程师)【英文标题】:SQL Server views not available via ODBC (reverse Engineer) 【发布时间】:2012-11-19 05:07:24 【问题描述】: SQL Server 2008 Visio Pro 2003 访问 2003 使用的系统 DSN

我需要对 SQL Server 数据库进行逆向工程,但是当我尝试这样做时,“视图”框“变灰”(存储过程也“变灰”,但在此阶段对我的需求来说是不必要的)。我正在使用具有sys_admin 权限的 SQL Server 帐户通过 ODBC 连接(需要使用 ODBC,因为 Visio 无法识别本机连接器,有据可查的缺陷,并且无法像我一样使用受信任的连接具有本地管理员权限并且我们公司拒绝在跨机器连接上识别本地管理员)。这是使用 ODBC SQL Server 类型的连接。如果我将 ODBC 连接更改为使用本机客户端类型,它允许我选择存储过程,不幸的是仍然无法选择视图框。

我使用普通 SQL Server 类型的 ODBC 与 Access 连接,以查看我能够链接的内容,它允许我查看所有表、视图,包括系统表和视图,这告诉我正在保留 sys_admin 权限通过 ODBC 连接。

我在这里遗漏了什么吗?在 SO 和 Google 上进行的多次搜索都没有发现为什么 Visio 看不到某些对象(忽略安全权限,因为我有管理员访问权限),并且能够通过 Access“看到”它们让我更加沮丧,我会假设使用相同类型的 ODBC 连接的两个产品会遇到相同的限制和功能。

如何让 Visio 让我使用“逆向工程师”功能将 SQL Server 中的视图放入我的 Visio 文档中?我过去曾在其他服务器上这样做过.

【问题讨论】:

您是否尝试将此作为一次性流程进行?如果是这种情况,那么您可能需要连接 SQL Management Studio 并手动创建您需要的查询。 不尝试创建查询。我只想从数据库中提取表/视图的“图片”,这样我就可以在 Visio 中很好地安排,以便能够提供数据流的图片,以便报告从何处获取数据。 【参考方案1】:

我在 SQL 数据库中创建了几个新视图,但在尝试通过 Access 链接到它们时无法看到它们。这总是归结为我没有授予用户对 SQL 数据库或视图的“选择”权限。请务必检查这一点。只值我的 2 美分。

【讨论】:

如上,“我正在使用具有sys_admin 权限的SQL Server 帐户”【参考方案2】:

tl;博士

不要使用 OBDC 驱动程序,使用 Access Visio 驱动程序。

为什么?

如发现here on SO:

一个旧线程,但仍然是一个当前问题......我发现虽然 使用 ODBC 通用驱动程序工作,逆向工程工具 然后错过了触发器、检查子句、视图和存储过程。 通过指定 Access Visio 驱动程序,至少我们恢复了 检查子句和视图。

不过,总的来说,我不得不说,我认为这显示出令人震惊的缺乏 代表相关团队在 微软。去年升级到 Visual Studio 2010 才发现我的 SSIS 项目不再 打开...从这个线程可以看出,MS 不在乎。

【讨论】:

【参考方案3】:

真的没有理由假设能够记录或绘制表之间关系的逆向工程工具与您保存了一些查询这一事实有关吗?视图只是一些保存的 SQL 查询,与表之间的关系没有任何关系。

保存的 SQL 查询(也称为视图)不是表设计结构。就您在数据库中构建的数据库结构和关系而言,视图的创建或视图的删除不会以任何方式产生任何影响。

因此,保守估计存在 1 万亿个网页的原因是,Google 或 Bing 搜索结果绝对不会为您的问题提供任何结果。

换句话说,您假设数据库 ER 图将包含一堆已保存的 SQL 查询,这完全是您的谬误。

现在您可能会问是否存在这样的文档工具,但您实际上问为什么找不到有关此主题的任何信息,简单的答案是因为地球上没有其他人,事实上据我们所知银河系做出你正在做的假设。

能够通过 Access“看到”它们让我有点沮丧。

不清楚您为什么会在 MS Access 等应用程序开发工具中使用此类视图时表现出更大的困惑?

为什么可以使用 Access 查看这些视图的简单答案是因为 Access 不是逆向工程工具。事实上,Access 也不是一个数据库文档工具。

Access 是一种软件开发工具,可让您构建应用程序并连接到给定的数据库系统。因此,MS Access 可以使用数据库,例如产品附带的本地数据库引擎(JET 或现在称为 ACE)。 Access 还可以连接到 Oracle 或类似 SQL 服务器的东西。

在所有这些情况下,毫无疑问,Access 可以连接到 SQL 视图,因为该工具旨在使用特定数据库引擎中的数据。然而,使用来自特定数据库系统的数据是一个巨大且截然不同的过程,然后使用逆向工程工具来确定表之间的关系。

数据库系统在表之间存在一些关系,或者您已经强制执行了您希望绘制图表的关系这一事实与将一些东西记录在某个地方的一堆简单 SQL 查询的过程完全无关。所以所有的视图实际上都是一些保存的 SQL。您可以将 SQL 保存在代码中、文本文件中,或者在 Access 的情况下使用我们所说的选择查询,或者在 SQL 服务器的情况下,您可以将 SQL 保存为视图。

但是,查看一堆保存的 SQL 查询与记录数据库中表之间关系的存在是完全不同的事情。创建视图、删除视图与表之间的关系为零。

事实上,我们看到 MS Access 表格图表工具无法在产品随附的表格关系图表工具中包含视图。所以事实上大多数开发工具并不在整体表 ER 图中包含视图。

因此,归根结底,Visio 之类的东西不能简单地消费和利用一堆保存的 SQL 查询的可能原因是,从设计上看,这样的工具根本不适合这个目的。

【讨论】:

-1 这对回答为什么 Visio 不允许我选择视图的问题没有任何帮助。 Visio 实际上确实为document views. 提供了功能。关于为什么要记录视图也有很多原因,所以我认为大喊大叫也是过火了。

以上是关于SQL Server 视图无法通过 ODBC 获得(逆向工程师)的主要内容,如果未能解决你的问题,请参考以下文章

无法将 ODBC 数据源添加到 SQL Server

如何创建指向字段名称中带有句点的 SQL Server 视图的 Jet ODBC 链接?

ODBC无法连接SQL SERVER

错误= [Microsoft] [SQL Server的ODBC驱动程序13]无法打开BCP主机数据文件

SQL SERVER 无法连接ODBC数据库

ODBC database driver for Go:Go语言通过ODBC 访问SQL server