更新时间: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
禁用所有外键
- 通过如下方式查看原外键。
图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 禁用外键
- 再次查看外键,可以看到外键已被禁用。
图4 查看外键
父主题: 迁移前的数据准备