更新时间:2025-12-12 GMT+08:00
分享

在目的端禁用所有触发器和外键

禁用所有表级触发器

执行如下SQL语句禁用所有标记触发器。

DECLARE @sql NVARCHAR(MAX) = '';
SELECT @sql = @sql + 'DISABLE TRIGGER ' + QUOTENAME(name) + ' ON ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_id)) + '.' + QUOTENAME(OBJECT_NAME(parent_id)) + ';' + CHAR(13)
FROM sys.triggers
WHERE is_ms_shipped = 0  -- 排除系统触发器
AND parent_class_desc = 'OBJECT_OR_COLUMN';  -- 只包含表级触发器
EXEC sp_executesql @sql;
图1 SQL语句

禁用库级触发器

禁用数据库级别的DDL触发器
DISABLE TRIGGER ALL ON DATABASE

禁用所有外键

  1. 通过如下方式查看原外键。
    图2 查看原外键
  2. 执行如下SQL语句禁用所有外键
    DECLARE @sql NVARCHAR(MAX) = '';
    SELECT @sql = @sql + 'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(parent_object_id)) + '.' + QUOTENAME(OBJECT_NAME(parent_object_id)) + ' NOCHECK CONSTRAINT ' + QUOTENAME(name) + ';' + CHAR(13)
    FROM sys.foreign_keys;
    EXEC sp_executesql @sql;
    图3 禁用外键
  3. 再次查看外键,可以看到外键已被禁用。
    图4 查看外键

相关文档