
# 在目的端禁用所有触发器和外键
#### 禁用所有表级触发器
执行如下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;
```
图1SQL语句   
![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002512038433.png)
#### 禁用库级触发器
禁用数据库级别的DDL触发器
```
DISABLE TRIGGER ALL ON DATABASE
```
#### 禁用所有外键
1. 通过如下方式查看原外键。
   图2查看原外键   
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002481818630.png) 
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禁用外键   
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002513978475.png) 
3. 再次查看外键，可以看到外键已被禁用。
   图4查看外键   
   ![](https://support.huaweicloud.com/bestpractice-drs/zh-cn_image_0000002514138447.png) 
 
