有什么方法可以引用在“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
Run Code Online (Sandbox Code Playgroud)
导致:
db_name db_forearch tb_foreach
ServerMonitor master master
Run Code Online (Sandbox Code Playgroud)
我想要一些类似的东西:
db_name db_forearch tb_foreach
ServerMonitor master <TABLE_NAME>
Run Code Online (Sandbox Code Playgroud)
我应该改变什么?
解决了。按照肖恩的建议,我使用了我的 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 = '^'
Run Code Online (Sandbox Code Playgroud) 我试图使用以下存储过程从服务器获取数据库.但是,我只想要一个月前创建的数据库.我需要做些什么来完成这项工作?
这是代码:
sp_msforeachdb 'IF ''?'' like ''z%''
BEGIN
print ''?''
END'
Run Code Online (Sandbox Code Playgroud)
我只想要在某个月创建的以Z开头的数据库.
我需要搜索具有特定前缀的某些数据库.找到这些数据库后,我需要检查某个模式是否存在以及是否存在 - 使数据库脱机.我一直在尝试在Google上找到的各种建议,但没有任何效果.我有一个错误,我无法通过.错误是'XYZ'不是公认的选项.如果我分离出代码它运行正常但是当我添加sp_MSforeachdb时,错误返回.
EXEC sp_msforeachdb 'IF ''?'' LIKE ''abc_%''
BEGIN
IF (NOT EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'XYZ'
BEGIN
ALTER DATABASE [abc_xxxxxxxxx] SET OFFLINE WITH
ROLLBACK IMMEDIATE
END'
Run Code Online (Sandbox Code Playgroud)
这段代码工作正常:
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'XYZ'
Run Code Online (Sandbox Code Playgroud)