gpt4 book ai didi

sql - 查询以选择所有数据库,然后对结果运行另一个查询

转载 作者:行者123 更新时间:2023-12-01 11:47:56 25 4
gpt4 key购买 nike

*******已编辑 em>*****

我有多个 sql 服务器,其中大约有 200-300 个数据库,我想节省我服务器上的空间。


我想通过任务调度程序运行此脚本,在我的 sql server 中的所有数据库上运行收缩例程。我有疑问,但我不知道如何将两者联系在一起。为了选择我使用的所有数据库

select * from sys.sysdatabases
Where name <> 'master' and name <> 'tempdb' and name <> 'model' and name <> 'msdb'

对于我的收缩路线,我使用这个

USE [single_database_name]
GO
DBCC SHRINKFILE ('single_database_name', 10)
GO

我如何连接这两个查询,以便“single_database_name”来自第一个查询的所有数据库名称列表。

谢谢你的帮助

最佳答案

在动态 SQL 中使用游标。这将在每个数据库上单独收缩每个文件。

Declare @dataFiles Table (databaseName Varchar(256), datafile Varchar(256))
Declare @SQL Nvarchar(Max), @databaseName Varchar(256), @dbfile Varchar(256)

Insert @dataFiles
select sd.name, smf.name
from sys.sysdatabases sd
join sys.master_files smf
On sd.[dbid] = smf.database_id
Where sd.name not in ('master','tempdb','model','msdb')

Declare cur Cursor For
Select databaseName,
datafile
From @dataFiles

Open cur
Fetch Next
From cur
Into @databaseName,
@dbfile

While @@Fetch_Status = 0
Begin
Set @SQL = 'USE [' + @databasename + ']
DBCC SHRINKFILE (''' + @dbfile + ''', 10) WITH NO_INFOMSGS'

Exec sp_executeSQL @SQL

Fetch Next
From cur
Into @databaseName,
@dbfile
End
Close cur
Deallocate cur

select sd.name As DatabaseName, smf.name DBFileName, (size*8)/1024 SizeMB
from sys.sysdatabases sd
join sys.master_files smf
On sd.[dbid] = smf.database_id
Where sd.name not in ('master','tempdb','model','msdb')

关于sql - 查询以选择所有数据库,然后对结果运行另一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14223897/

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