【问题标题】:Can I trap the "Cannot truncate table" error and Delete instead?我可以捕获“无法截断表”错误并改为删除吗?
【发布时间】:2017-06-07 19:05:54
【问题描述】:

我知道TRUNCATE TABLE "MyTable" 的有效替换是: DELETE FROM MyTable DBCC CHECKIDENT ('DATABASENAME.dbo.MyTable',RESEED, 0)

但是,我希望尽可能使用TRUNCATE TABLE,但我有一些使用数据库复制的客户。对于那些客户,我收到错误:Cannot truncate table 'MyTable' because it is published for replication or enabled for Change Data Capture.

有没有办法 1) 预先测试 TRUNCATE 是否可以工作,或者 2) 发出 TRUNCATE 命令,使其不会失败,而是留下一个可测试的值 (@@ERROR也许?)如果它失败了,我可以执行DELETE

【问题讨论】:

    标签: sql-server sql-delete truncate


    【解决方案1】:
    begin try
        truncata table dbo.YourTableName;
    end try
    begin catch
        delete from dbo.YourTableName;
    end catch
    

    这样的……

    【讨论】:

    • 你的想法,经过一些小的调整,在 SQL Server 2012 下运行良好:begin try TRUNCATE TABLE "MyTable" end try begin catch DELETE FROM MyTable; DBCC CHECKIDENT ('dbo.MyTable',RESEED, 0) end catch ...这工作
    猜你喜欢
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 2022-12-15
    • 2015-04-02
    相关资源
    最近更新 更多