问题标签 [sp-msforeachdb]

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 投票
4 回答
5812 浏览

sql-server - 帮助 sp_msforeachdb 类似查询

在我所在的地方,我们有一个在大型机系统上运行的软件包。大型机每晚都会转储到 sql server 中,这样我们的每个客户端在服务器中都有自己的数据库。服务器实例中还有一些其他数据库,以及一些没有数据的旧客户端数据库。

我们经常需要跨所有客户端运行报告或检查数据。我希望能够使用 sp_msforeachdb 或类似的东西运行查询,但我不确定如何从列表中过滤不需要的数据库。关于这如何工作的任何想法?

我们仍在使用 SQL Server 2000,但几个月后应该会迁移到 2005。


更新:
我认为我在问这个问题时做得很糟糕,所以我要澄清我的目标,然后发布我最终使用的解决方案。

我想在这里完成的是让从事查询以在他们的程序中使用的程序员更容易使用一个客户端数据库编写查询,然后几乎立即运行(测试)在所有 50 个客户端的数据库上设计和构建的代码左右客户端数据库,几乎没有修改。

考虑到这一点,这是我目前位于 Management Studio 中的代码(部分混淆):

这样做的好处是您所要做的就是将@sql 变量设置为您的查询文本。很容易变成存储过程。它是动态 sql,但同样:它仅用于开发(著名的遗言;))。缺点是您仍然需要转义查询中使用的单引号,并且很多时候您最终会''?'' As ClientDB在选择列表中放置一个额外的列,但除此之外它工作得很好。

除非我今天有另一个非常好的主意,否则我想把它变成一个存储过程,并将一个版本组合成一个表值函数,使用一个临时表将所有结果放在一个结果集中(仅用于选择查询)。

0 投票
2 回答
1335 浏览

sql-server - sp_MSforeachdb MS SQL 错误

这适用于 MS SQL 2005:任何人都知道为什么第一个成功,然后连续创建两个相同的语句失败?所有的陈述都是完全一样的。将双引号更改为两个单引号具有相同的效果。

sp _MSforeachdb @command1 = 'if (left("?", 2) = "p _") 开始;打印 ”?”; 结尾;';

生产

p _NationalBrands
p _NonBrand
p以P下划线开头的_数据库_名称_____

sp _MSforeachdb @command1 = 'if (left("?", 2) = "p _") 开始;打印 ”?”; 结尾;';
sp _MSforeachdb @command1 = 'if (left("?", 2) = "p _") 开始;打印 ”?”; 结尾;';

生产

消息 102,级别 15,状态 1,第 2 行“sp_MSforeachdb”附近的语法不正确。

0 投票
2 回答
7060 浏览

sql-server - sp_MSforeachdb 查询帮助

我正在使用许多相同的数据库,因此我使用 sp_MSforeachdb 过程,以便可以从表中检索信息。

我遇到的问题是盒子上有其他数据库没有表,所以我抛出了无效对象错误。

这是我目前所拥有的,我正在过滤 LoginDatabase,因为它具有相同的表,但我不希望在查询中使用它。

我的问题是,我怎样才能将它限制在我想从中获取信息的表的数据库中。

0 投票
1 回答
1122 浏览

sql-server - 我想更新服务器上每个数据库中的一个表

我有一个具有相同字段“SMTP_Server”的配置表。我想用服务器上每个数据库中的新值更新字段。

sp_foreachdb更新最后一个表(在最后一个数据库中)。为什么?

请帮忙

0 投票
1 回答
888 浏览

sql - 使用隐藏的存储过程

我正在尝试使用以下存储过程从服务器获取数据库。但是,我只想要一个月前创建的数据库。我该怎么做才能完成这项工作?

这是代码:

我只想要在某个月份创建的以 Z 开头的数据库。

0 投票
1 回答
112 浏览

sql - 我想将日志文件的大小存储在临时表中

有什么问题

insert into #tempA(MailSize) EXEC sp_foreachdb_dev @command = N' USE ? SELECT (size * 8)/1024.0 AS size_in_mb FROM
sys.database_files WHERE
data_space_id = 0', @user_only = '1' select * from #tempA

我想将日志文件的大小存储在临时表中

0 投票
1 回答
630 浏览

sql-server - 意外的 sp_MSForEachDB 行为

我正在努力提高我对一些系统存储过程的理解,但我对我正在处理的这个脚本感到非常困惑。为了锻炼我的理解,sp_MSForEachDB我决定编写一个脚本来截断服务器上所有数据库的日志。因此,我想出了以下脚本:

事实证明,这只是有时会成功截断数据库的日志。在数据库上它失败(没有错误消息,只是给我留下一个未截断的日志文件),它始终/可重复地失败。

然而,在 print 语句中,它打印的正是我期望它打印的内容。但是,如果我手动为每个数据库键入此脚本的功能部分:

它在 100% 的时间内有效。

为什么我的sp_MSForEachDB“循环”没有按预期工作?我错过了什么?

0 投票
1 回答
553 浏览

sql-server - 如何创建返回针对多个数据库运行的查询结果的表值函数或视图

我需要创建一个视图或表值函数,该函数从针对动态数据库列表(存储在表中)运行的查询中返回一个结果集。所有数据库都具有相同的结构,并且 view/tvf 应该包含等效于对 databases_table 中每个数据库的联合所有查询。所有这一切的总体情况是,我需要通过 ODBC 获得此查询的结果。

在网上看了很多之后,我想出了一些潜在的解决方案,但没有一个完全符合我想要完成的目标。

我研究的第一件事是为每个不同的数据库选择一个视图,所有这些都结合在一起。这工作得很好,除了它离我想象的可维护性还很远。我将有 25-100 个此类多数据库查询,所有这些查询都必须针对不断变化的数据库集运行。

我仍在考虑可能使用这种方法,并制作一个存储过程来为我动态创建视图,但这仍然不是很有用,因为我被要求让整个过程免提。这样做需要有人在我们尝试通过 ODBC 连接到视图之前触发视图更新。如果可能的话,我想避免这种情况。

我研究的第二件事让我更接近我需要的东西。我使用了 sp_msforeachdb 存储过程,检查了数据库是否在列表中,如果是,我将查询结果添加到表变量中。这工作得很好,但问题是动态 sql 使我无法将它包装到表值函数或视图中......

从 ms ssms 的查询运行它时,这非常有效,但正如我所说,将它放入 veiw 或 tvf 已证明超出了我的能力。据我所知,动态 SQL 排除了 tvf 的使用,并且视图无法使用变量。

有什么方法可以通过 ODBC 使上述代码的结果可用。有没有我想念的替代解决方案?

0 投票
2 回答
3728 浏览

sql - SQL获取数据库中特定表的表行数

我如何遍历所有数据库并获取每个员工表的行数?每个客户都有自己的数据库,需要找到每个数据库中的员工总数。

一直试图弄清楚如何使用sp_MSforeachdb

可以在单独的表中输出,也可以在一个带有数据库名称的表中输出。

0 投票
2 回答
673 浏览

c# - Sp_msforeachtable 仅返回 C# 中的第一个表

我想用 sp_msforeachtable 列出数据库的表。我在 SSMS 中做得很好(我在 sp_list2 存储过程中写了它),但是当我想在 c# 中使用这个存储过程时,它只是在列表框中返回数据库的第一个表!

C#中的代码:

我的存储过程: