继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

用另外方法替代TRUNCATE TABLE

慕田峪9129951
关注TA
已关注
手记 337
粉丝 200
获赞 993

某些情况之下,我们需要做清除表的记录。可以使用TRUNCATE函数实现,并让自动增长的主键ID重新开始。但是如果遇上表与其它表有关联,即是说主键是其它表的外键时,使用这个函数清除表记录,会接收到一条Error的信息:

Msg 4712, Level 16, State 1, Line 1
Cannot truncate table 'dbo.topic' because it is being referenced by a FOREIGN KEY constraint.

我们是否有其它替代方法可以使用呢?答案是肯定的。Insus.NET有写了一个存储过程,即是使用DELETE 和 DBCC一起来完成。

你可以参考下列存储过程:

View Code IF OBJECT_ID('[dbo].[InsusTRUNCATE]') IS NOT NULL
DROP PROCEDURE [dbo].[InsusTRUNCATE]
GO

CREATE PROCEDURE [dbo].[InsusTRUNCATE]
(
    @TableName NVARCHAR(128),
    @NewReseedValue INT    
)
AS
    EXECUTE ('DELETE FROM ' + @TableName)
    DBCC CHECKIDENT(@TableName, RESEED, @NewReseedValue)

 

 调用存储过程演示:

EXECUTE [dbo].[InsusTRUNCATE] 'dbo.topic',0 

 

 

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP