gpt4 book ai didi

sql-server - 如何在同一查询中同时使用 sp_msforeachtable 和 sp_msforeachdb?

转载 作者:行者123 更新时间:2023-12-03 03:21:28 26 4
gpt4 key购买 nike

是否有任何方法可以引用在“sp_msforeachdb”循环内运行的“sp_MSforeachtable”循环内的表?

例如,在以下查询中“?”始终引用数据库:

DECLARE @cmd VARCHAR(8000);

SET @cmd = 'USE ?; EXEC sp_MSforeachtable @command1="select db_name = DB_NAME(), db_foreach = ''?'', tb_foreach = ''?'' "'

EXEC sp_msforeachdb @command1 =@cmd

结果:

 db_name        db_forearch    tb_foreach
ServerMonitor master master

我想要这样的东西:

 db_name        db_forearch    tb_foreach
ServerMonitor master <TABLE_NAME>

我应该改变什么?

<小时/>

已解决。按照 Sean 的建议,我使用了 ow 光标。但 Ben Thul 建议的 @replacechar 解决方案正是我正在寻找的。

DECLARE @cmd VARCHAR(8000);

SET @cmd = 'USE ^; EXEC sp_MSforeachtable @command1="select db_name = DB_NAME(), db_foreach = ''^'', tb_foreach = ''?'' "'

EXEC sp_msforeachdb @command1 =@cmd, @replacechar = '^'

最佳答案

查看 sp_msforeachtable 的参数。其中之一是@replacechar,默认情况下,它是一个问号(即?)。请随意传递另一个同样不可能出现在查询中的字符(可能是 ^)。

当然,如果我没有提到这一点,那就是我的失职,这取决于你想要做什么(我认为你想要在所有 table 上做的任何事情都可以通过这种方式实现), powershell 中有更容易阅读(和编写)的解决方案:

import-module sqlps -disablenamechecking;
$s = new-object microsoft.sqlserver.management.smo.server '.';
foreach ($db in $s.databases) {
foreach ($table in $db.Tables) {
$table | select parent, name; --merely list the table and database
}
}

关于sql-server - 如何在同一查询中同时使用 sp_msforeachtable 和 sp_msforeachdb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27251989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com