我正在尝试一个非常简单的drop column
陈述:
alter table MyTable drop column MyColumn
并收到几个错误
消息 5074,16 级,状态 1,第 1 行
统计信息“_dta_stat_1268251623_3_2”取决于列“MyColumn”。
最终紧随其后的是
消息 4922,16 级,状态 9,第 1 行
ALTER TABLE DROP COLUMN MyColumn 失败,因为一个或多个对象访问此列。
我不认为统计数据会阻止列被删除。他们有吗?如果是这样,由于这些显然是自动创建的统计信息,我不能依赖同一数据库的多个副本中相同的名称,那么我如何在要在不同数据库上执行的升级脚本中删除所有此类统计信息?
JNK 答案中提出的代码不起作用,但这个想法很好。如果您想删除所有用户创建的统计信息,这是我经过测试的解决方案:
DECLARE @sql NVARCHAR(MAX)
DECLARE statCursor CURSOR FOR
SELECT
'DROP STATISTICS ' + QUOTENAME(SCHEMA_NAME(t.schema_id))
+ '.' + QUOTENAME(t.name)
+ '.' + QUOTENAME(st.name) AS sql
FROM
sys.stats AS st
INNER JOIN sys.tables AS t
ON st.object_id = t.object_id
WHERE
st.user_created = 1
ORDER BY 1;
OPEN statCursor;
FETCH NEXT FROM statCursor INTO @sql
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @sql
EXEC sp_executesql @sql
FETCH NEXT FROM statCursor INTO @sql
END
CLOSE statCursor
DEALLOCATE statCursor
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)