我正在尝试在 Sql Server Management Studio 上执行此命令:
DROP STATISTICS dbo.TableName.StatsName
但我收到此错误:
无法删除索引,因为它不是统计信息集合。
此外,如果我尝试进入导航菜单上的“统计”表文件夹,并尝试使用上下文菜单进行删除,则语音删除被禁用。
当我尝试在sys.stats
表中查找它时,我得到以下结果:
Auto_Created: 0
User_Created: 0
有没有办法删除这种统计数据?
编辑
感谢 CR241 的回答和 Dan Guzman 的评论,我能够找到解决这个问题的方法。我想改变一个 nvarchar 列的长度,但不能这样做,因为它有一些限制。我在很多数据库表上都遇到了同样的问题。这是因为使用 Database Tuning Advisor 创建了许多索引和统计信息。所以我创建了一个脚本来删除它们(理想的方法是在更改所有列之后删除和恢复)。也许这对其他人有用:
GO
DECLARE selectIndexes CURSOR FOR
SELECT
QUOTENAME(SCHEMA_NAME(t.[schema_id]))
+ '.' + QUOTENAME(t.name)
+ '.' + QUOTENAME(i.name) as FullIndexName
FROM sys.indexes i
INNER JOIN sys.tables t ON i.[object_id] = t.[object_id]
INNER JOIN sys.stats s ON s.object_id = i.object_id and s.name = i.name
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc ON i.Name = tc.CONSTRAINT_NAME
AND OBJECT_NAME(i.Object_ID) = tc.TABLE_NAME
where QUOTENAME(i.name) like '__dta_%' and i.type_desc = 'NONCLUSTERED';
DECLARE @fullIndexName nvarchar(max);
DECLARE @sql NVARCHAR(max) = '';
OPEN selectIndexes
FETCH NEXT FROM selectIndexes INTO @fullIndexName
WHILE (@@FETCH_STATUS = 0)
BEGIN
set @sql = @sql+ 'DROP INDEX ' + @fullIndexName + CHAR(13) + CHAR(10);
FETCH NEXT FROM selectIndexes INTO @fullIndexName
END
CLOSE selectIndexes
DEALLOCATE selectIndexes
print @sql;
--exec sp_executesql @sql;