问题标签 [sql-smo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2783 浏览

c# - SQL SMO 未枚举表

我只是问这个问题,我觉得自己很笨,但我没有从谷歌那里得到任何帮助,我通过简单的搜索 SMO 浏览了所有 SO 的结果,也没有看到它。

简短的版本是我开始玩 T4。我正在扩展Oleg Sych 的初始教程,以提供对所有表的枚举以创建一个(恕我直言,相当愚蠢)删除过程。这只是一个实验,所以它完全没用并不会打扰我。:)

我对 Oleg 教程的扩展如下所示:

问题是Tables集合中没有返回表。这由我生成的表计数 SQL 注释验证,它输出0.

如所写,上面的代码生成以下内容:

但是,如果我删除 for 循环并手动提供此数据库中存在的有效表名,它会为该表生成(又是愚蠢的)proc。

这些表被分成一个模式,这有关系吗?此外,这与 SQL2005 实例背道而驰——这可能会导致问题吗?

最后,我还发现我无法通过 Synonyms 集合枚举同义词。(我想我会很聪明,走那条路,因为表在一个模式中,但是定义了同义词。但是......没有骰子。)

再次重申,上面的代码自然不是生产,甚至不值得生产。我只是想同时学习 T4 和 SMO,并在尝试做一些我认为简单得可笑的事情时遇到了障碍。:)

0 投票
2 回答
6177 浏览

sql - SQL比较数据库之间的两个存储过程

我有两个版本的同一数据库,需要在它们之间存储一些对象(存储过程、视图等)

实际上 ?m 使用 SQLDMO-SQLSMO 来检索每个对象的文本,然后我执行文本比较。这是有效的,但如果我有更多的棕褐色 1000 多个对象,则需要很长时间。

我的问题是。有一种简单的方法来执行这种比较?也许是在数据库上生成的 MD5 密钥?

0 投票
1 回答
674 浏览

sql-server - 在 SQL 2016 SMO 中模拟用户帐户失败

我正在使用本地系统帐户运行 Windows WCF 服务,并且在我们尝试使用 SMO 和域用户帐户连接到 SQL Server 实例的服务中。

下面显示的代码工作正常,我正在使用 SQL Server 2014 SDK 中的 SMO,但是如果我使用 SQL Server 2016 CTP 3.2 SMO,那么它会抛出一个异常,说明

用户 {domain}{local machine name} 登录失败

其中我在服务器连接对象中提供了域管理员凭据。

注意:如果我通过域管理员帐户而不是本地系统帐户运行我的 Windows 服务,那么下面的代码可以正常工作,没有任何异常。

看起来 SQL 2016 SMO 二进制文件无法模拟给定的用户帐户。

问候

阿什什

0 投票
1 回答
82 浏览

c# - 如何订阅数据库附加/分离事件?

我正在编写一个 C# 应用程序,它与数据库一起使用并每月创建一个新数据库。

用户可以通过 SQL Management Studio 或其他方式分离和附加旧数据库。

我试图弄清楚如何监听 sql server 事件(如果它们存在)并捕捉数据库何时被附加或分离。

attach操作发生时,我的应用程序必须检查数据库并将表模式更新到最新版本。

我也在学习 SQL SMO,并认为这个库会向我展示事件侦听器,但我找不到它们。

当然,我可以运行一个线程或计时器,每隔几秒钟检查一次新数据库。我已经尝试过并运行SQLServer.Databases.Refresh()更新数据库列表,然后我可以迭代和使用。

但是有没有更简单的方法来实现这一点?也许有像OnDatabaseAttach某处这样的事件?

编辑

感谢elsausmc将我引向正确的方向。我做了一点搜索ServerEventSet,发现了这个页面

我做了一个快速测试,结果证明,它ServerEvent.CreateDatabase在创建或附加数据库时会启动,但ServerEvent.DropDatabase在分离时不会启动。可能是其他一些事件。那是我接下来要了解的。谢谢 :)

一直在谷歌上搜索 10 多个不同的短语,但从未想出简单的smo server events. 傻我。

0 投票
2 回答
67 浏览

c# - 遍历 SQL smo 中的所有表时,如何仅识别基表?

这是我的代码:

基本上,我认为这也会收回观点。我用来识别所需表的 SQL 是:

SELECT TABLE_NAME FROM MyDatabase.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'

但是,结果似乎没有TABLE_TYPE属性是Microsoft.SqlServer.Management.Smo.TableCollection. 根据 SQL,TABLE_TYPE 要么BASE TABLE只有VIEW两种可能。

如何仅识别表(而不是视图)?