问题标签 [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.
c# - SQL SMO 未枚举表
我只是问这个问题,我觉得自己很笨,但我没有从谷歌那里得到任何帮助,我通过简单的搜索 SMO 浏览了所有 SO 的结果,也没有看到它。
简短的版本是我开始玩 T4。我正在扩展Oleg Sych 的初始教程,以提供对所有表的枚举以创建一个(恕我直言,相当愚蠢)删除过程。这只是一个实验,所以它完全没用并不会打扰我。:)
我对 Oleg 教程的扩展如下所示:
问题是Tables
集合中没有返回表。这由我生成的表计数 SQL 注释验证,它输出0
.
如所写,上面的代码生成以下内容:
但是,如果我删除 for 循环并手动提供此数据库中存在的有效表名,它会为该表生成(又是愚蠢的)proc。
这些表被分成一个模式,这有关系吗?此外,这与 SQL2005 实例背道而驰——这可能会导致问题吗?
最后,我还发现我无法通过 Synonyms 集合枚举同义词。(我想我会很聪明,走那条路,因为表在一个模式中,但是定义了同义词。但是......没有骰子。)
再次重申,上面的代码自然不是生产,甚至不值得生产。我只是想同时学习 T4 和 SMO,并在尝试做一些我认为简单得可笑的事情时遇到了障碍。:)
sql - SQL比较数据库之间的两个存储过程
我有两个版本的同一数据库,需要在它们之间存储一些对象(存储过程、视图等)
实际上 ?m 使用 SQLDMO-SQLSMO 来检索每个对象的文本,然后我执行文本比较。这是有效的,但如果我有更多的棕褐色 1000 多个对象,则需要很长时间。
我的问题是。有一种简单的方法来执行这种比较?也许是在数据库上生成的 MD5 密钥?
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 二进制文件无法模拟给定的用户帐户。
问候
阿什什
c# - 如何订阅数据库附加/分离事件?
我正在编写一个 C# 应用程序,它与数据库一起使用并每月创建一个新数据库。
用户可以通过 SQL Management Studio 或其他方式分离和附加旧数据库。
我试图弄清楚如何监听 sql server 事件(如果它们存在)并捕捉数据库何时被附加或分离。
当attach
操作发生时,我的应用程序必须检查数据库并将表模式更新到最新版本。
我也在学习 SQL SMO,并认为这个库会向我展示事件侦听器,但我找不到它们。
当然,我可以运行一个线程或计时器,每隔几秒钟检查一次新数据库。我已经尝试过并运行SQLServer.Databases.Refresh()
更新数据库列表,然后我可以迭代和使用。
但是有没有更简单的方法来实现这一点?也许有像OnDatabaseAttach
某处这样的事件?
编辑
感谢elsausmc将我引向正确的方向。我做了一点搜索ServerEventSet
,发现了这个页面。
我做了一个快速测试,结果证明,它ServerEvent.CreateDatabase
在创建或附加数据库时会启动,但ServerEvent.DropDatabase
在分离时不会启动。可能是其他一些事件。那是我接下来要了解的。谢谢 :)
一直在谷歌上搜索 10 多个不同的短语,但从未想出简单的smo server events
. 傻我。
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
两种可能。
如何仅识别表(而不是视图)?