我的一个DB已经越来越接近允许的大小.
为了找到包含最大数据的表,我使用了以下查询:
exec sp_MSforeachtable @command1="print '?' exec sp_spaceused '?'"
Run Code Online (Sandbox Code Playgroud)
它返回了包含最大数据的罪魁祸首表.
下一步,我想根据大小清理行.为此,我想根据大小订购行.
如何使用查询实现此目的?有没有工具可以做到这一点?
小智 11
这将按行大小给出一个行列表,只需相应地设置@table和@idcol(如同写入它将针对Northwind示例运行)
declare @table varchar(20)
declare @idcol varchar(10)
declare @sql varchar(1000)
set @table = 'Employees'
set @idcol = 'EmployeeId'
set @sql = 'select ' + @idcol +' , (0'
select @sql = @sql + ' + isnull(datalength(' + name + '), 1)'
from syscolumns where id = object_id(@table)
set @sql = @sql + ') as rowsize from ' + @table + ' order by rowsize desc'
exec (@sql)
Run Code Online (Sandbox Code Playgroud)
对于所有表大小来说,一种更简单的方法是使用此站点上的存储过程。您可以将该存储过程的 select 语句更改为:
SELECT *
FROM #TempTable
Order by dataSize desc
Run Code Online (Sandbox Code Playgroud)
按尺寸排序。
你想如何清理?清理特定表的最大行?不确定我理解这个问题。
编辑(回复评论)
假设您的事件日志与我的事件日志具有相同的布局(DNN 事件日志):
SELECT LEN(CONVERT(nvarchar(MAX), LogProperties)) AS length
FROM EventLog
ORDER BY length DESC
Run Code Online (Sandbox Code Playgroud)