Che*_*hev 12 sql sql-server-2008 sql-update sql-delete
在论坛的数据库中,我错误地将主体设置为nvarchar(MAX)
.当然,有人发布了英国百科全书百科全书.所以现在有一个论坛主题因为这一篇文章而无法加载.我已经确定了帖子并对其进行了删除查询,但由于某种原因,查询只是坐下并旋转.我已经放了几个小时,它只是坐在那里.最终会超时.
我也尝试过编辑帖子的主体,但也可以坐着并挂起.当我坐下来让我的查询运行整个数据库挂起,所以我同时关闭该网站,以防止进一步的请求,而它正在思考.如果我取消我的查询,那么该网站将恢复正常,并且所有不涉及该问题的记录的查询都会非常有效.
其他人遇到过这个问题吗?有没有一种简单的方法来粉碎这个邪恶的记录?
更新:对不起,SQL Server的版本是2008.
这是我正在运行的删除记录的查询:
DELETE FROM [u413].[replies] WHERE replyID=13461
Run Code Online (Sandbox Code Playgroud)
我还尝试删除主题本身,该主题与回复和删除相关回复的主题上的回复和删除有关系.这也很常见.
选项 1。取决于表本身有多大以及行有多大。
将数据复制到新表:
SELECT *
INTO tempTable
FROM replies WITH (NOLOCK)
WHERE replyID != 13461
Run Code Online (Sandbox Code Playgroud)
尽管需要时间,但在复制过程中不应该锁定表
删除旧表
DROP TABLE replies
Run Code Online (Sandbox Code Playgroud)
在删除之前:
- 编写当前索引和触发器的脚本,以便稍后能够重新创建它们
- 编写脚本并将所有外键删除到表中
重命名新表
sp_rename 'tempTable', 'replies'
Run Code Online (Sandbox Code Playgroud)重新创建所有外键、索引和触发器。
选项 2.分区。
添加一个新的位列,称为“分区”,将除坏行之外的所有行设置为 0。将其设置为 1 表示不好。
创建分区函数,以便有两个分区 0 和 1。
创建一个与原始表结构相同的临时表。
将分区 1 从原始表切换到新临时表。
删除临时表。
从源表中删除分区并删除新列。
分区主题并不简单。互联网上有一些例子,例如SQL Server 2005 中的分区切换