

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# DMS 架构转换中的选择规则
<a name="sc-selection-rules"></a>

DMS 架构转换将数据库架构从一个引擎转换为另一个引擎。您可以使用*选择规则*来控制 DMS Schema Conversion 在评估、转换和导出等操作期间对哪些数据库对象执行操作。选择规则是您通过`SelectionRules`参数（或在 Amazon CLI `--selection-rules` 中）传递的 JSON 对象。如果没有选择规则，操作就没有什么可执行的。使用规则，您可以将操作范围限定为单个对象、整个架构、整个数据库（对于 Microsoft SQL Server 和 SAP ASE（Sybase ASE）源代码）或一组与模式匹配的对象。

**注意**  
当您使用 Amazon 管理控制台时，DMS 架构转换会根据您在迁移项目 UI 中的选择自动构建选择规则。使用 DMS 架构转换 API 或 Amazon CLI 时，您只需直接编写选择规则即可。

在迁移项目的源端和目标端使用相同的规则形状。对象定位器中的`server-name`字段指定规则是针对源数据提供器还是目标数据提供器。单个迁移项目通常使用两种规则：用于评估和转换的源规则；SQL 导出的目标规则。

## 选择规则格式
<a name="dms-sc-selection-rule-format"></a>

选择规则文档是具有单个`rules`数组的 JSON 对象。数组中的每个条目都是一条规则，并且每个规则都必须包含以下所有字段。


| 参数 | 值 | 说明 | 
| --- | --- | --- | 
| rule-type | selection | 标识规则类型的值。对于所有选择规则，请将其设置为selection。必需的参数。 | 
| rule-id | 一个数字（整数）值。 | 规则的唯一数字标识符。必需的参数。 | 
| rule-name | 一个字母数字值。 | 一个用于标识规则的唯一名称。必需的参数。 | 
| rule-action | explicit、include 或 exclude | 决定如何解释对象定位器的值。请参阅[规则操作](#dms-sc-selection-rule-actions)。必需的参数。 | 
| object-locator | 包含引擎专用定位键的 JSON 对象。 | 标识规则适用的数据库对象的对象。请参阅[对象定位器层次结构](#dms-sc-selection-rule-object-locator)。必需的参数。 | 

以下最小示例以源服务器上的一个架构为目标。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "{{rule_name}}",
      "rule-action": "explicit",
      "object-locator": {
        "server-name": "{{source_server}}",
        "schema-name": "{{schema_name}}"
      }
    }
  ]
}
```

**注意**  
使用 Amazon CLI 时，您可以通过以下方式传递选择规则。这是一项标准 Amazon CLI 功能，适用于任何字符串参数。  
Inline:`--selection-rules '{"rules":[...]}'`（使用单引号以避免转义 JSON 双引号）
相对路径：`--selection-rules file://example-rules.json`
绝对路径：`--selection-rules file:///tmp/example-rules.json`

里面的所有字段值都`object-locator`必须是非空字符串。空字符串（例如`"schema-name": ""`）被拒绝并显示错误。

**注意**  
该`database-name`密钥仅对微软 SQL Server 和 SAP ASE（Sybase ASE）源有效。为任何其他源引擎发送`database-name`定位器都会被拒绝，因为密钥不受支持。

## 写入规则
<a name="dms-sc-writing-rules"></a>

### 对象定位器层次结构
<a name="dms-sc-selection-rule-object-locator"></a>

通过引擎特定密钥的层次结构`object-locator`识别一个或多个数据库对象。每个密钥都会缩小范围；省略较低级别的密钥以扩大范围。层次结构取决于源引擎：
+ **微软 SQL Server 和 SAP ASE（Sybase ASE）**— `server-name` ` → ` `database-name` ` → ` `schema-name` ` → ` 对象级密钥（例如）。`table-name`这些引擎在服务器和架构之间有一个额外的`database-name`级别。
+ **所有其他引擎**（甲骨文、适用于 IBM 的 Db2 以及所有目标引擎：PostgreSQL z/OS、Aurora PostgreSQL、MySQL、Aurora MySQL 和 IBM Db2 LUW）— 对象级密钥。`server-name` ` → ` `schema-name` ` → `这些引擎没有`database-name`级别；架构是正下方的顶部容器`server-name`。

以下示例选择了一个特定的微软 SQL Server 表。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "{{rule_name}}",
      "rule-action": "explicit",
      "object-locator": {
        "server-name": "{{source_server}}",
        "database-name": "{{database_name}}",
        "schema-name": "{{schema_name}}",
        "table-name": "{{table_name}}"
      }
    }
  ]
}
```

要将范围扩大到整个架构，请省略叶级密钥。然后，该规则适用于该架构中的所有可寻址对象类型，包括表、视图、过程、函数、序列以及源引擎公开的任何其他对象。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "{{rule_name}}",
      "rule-action": "explicit",
      "object-locator": {
        "server-name": "{{source_server}}",
        "database-name": "{{database_name}}",
        "schema-name": "{{schema_name}}"
      }
    }
  ]
}
```

您可以使用的定位键取决于源引擎或目标引擎。有关每个引擎的完整密钥参考，请参阅[按数据库排列的对象定位器密钥](#dms-sc-selection-rule-locator-keys)。

### 源规则和目标规则
<a name="dms-sc-selection-rule-source-vs-target"></a>

没有明确的`rule-type`字段将规则标记为 “来源” 或 “目标”。您可以完全通过中的`server-name`值来控制区别`object-locator`：如果`server-name`与您的**源**数据提供程序匹配，则规则以源元数据树为目标；如果它与您的**目标**数据提供程序匹配，则规则将目标元数据树作为目标。

因为`server-name`你可以使用以下任一方法：
+ 在数据提供器中配置的**服务器名称**值。这通常是主机名或 IP 地址，但必须与存储在数据提供程序中的值完全匹配，而不是解析到同一台计算机的不同 DNS 名称或 IP。
+ 数据提供者的**资源 ID** — 其 ARN 的最后一段（例如，如果 ARN 是`arn:aws:dms:us-east-1:111122223333:data-provider:EXAMPLEABCDEFGHIJKLMNOPQRS`，则资源 ID 为）。`EXAMPLEABCDEFGHIJKLMNOPQRS`

### 规则操作
<a name="dms-sc-selection-rule-actions"></a>

使用该`rule-action`字段指定 DMS 架构转换如何解释对象定位器内的值。通配符只能与`include`和`exclude`一起使用。


| 值 | 行为 | 何时使用 | 
| --- | --- | --- | 
| `"include"` | 选择名称与模式匹配的所有对象。支持`%`（任何由零个或多个字符组成的序列）和`_`（任何单个字符）作为通配符。`[_]`用于匹配字面下划线和`[%]`匹配字面百分比字符。 | 用于将一组具有共享命名模式的对象进行匹配。 | 
| `"exclude"` | 从已按上述`include`规则选择的集合中移除对象。没有前缀的`exclude`规则`include`无效。 | 用于从更广泛的角度`include`区分例外情况。 | 
| `"explicit"` | 精确选择命名的对象。每个定位器值（包括`schema-name``database-name`、）和任何叶键（例如`table-name`或`scalar-function-name`）都作为文字字符串进行匹配。通配符`%`，例如、`_``[`、和，在下`]``explicit`没有特殊含义。 | 当您知道要操作的每个对象的确切名称时使用。 | 

**注意**  
有些操作只接受`"explicit"`规则，不支持`"include"`或`"exclude"`。查看 [Amazon API 参考](https://docs.amazonaws.cn/dms/latest/APIReference/API_Operations.html)以了解具体操作，以确认其支持哪些规则操作。

## 对象定位器参考
<a name="dms-sc-locator-reference"></a>

### 按数据库排列的对象定位器密钥
<a name="dms-sc-selection-rule-locator-keys"></a>

以下选项卡显示了每个受支持数据库的定位器密钥。

------
#### [ SQL Server ]


| Key | 选择 | 
| --- | --- | 
| `server-name` | 服务器。 | 
| `database-name` | 服务器上的数据库。 | 
| `schema-name` | 数据库中的架构。 | 
| `table-name` | 默认为表格，或与一起使用时的视图`"table-type": "view"`。 | 
| `table-type` | `"table"`（默认）或`"view"`。 | 
| `procedure-name` | 存储过程。 | 
| `scalar-function-name` | 一个标量值函数。 | 
| `table-valued-function-name` | 表值函数。 | 
| `inline-function-name` | 一个内联函数。 | 
| `aggregate-function-name` | 聚合函数。 | 
| `synonym-name` | 同义词。 | 
| `sequence-name` | 一个序列。 | 
| `type-name` | 一种类型。 | 
| `table-type-name` | 一种表格类型。 | 
| `user-defined-type-name` | 用户定义的类型。 | 
| `xml-schema-collection-name` | 一个 XML 架构集合。 | 
| `category-name` | 一个对象类。用于定位整个类别的对象；请参阅[按引擎划分的类别名称](#dms-sc-category-names)。 | 

------
#### [ Oracle ]


| Key | 选择 | 
| --- | --- | 
| `server-name` | 服务器。 | 
| `schema-name` | 架构（甲骨文用户）。 | 
| `table-name` | 默认为表格，或与一起使用时的视图`"table-type": "view"`。 | 
| `table-type` | `"table"`（默认）或`"view"`。 | 
| `procedure-name` | 存储过程。 | 
| `function-name` | 函数 | 
| `package-name` | 一个包裹。 | 
| `sequence-name` | 一个序列。 | 
| `synonym-name` | 同义词。 | 
| `type-name` | 用户定义的类型。 | 
| `materialized-view-name` | 实体化视图。 | 
| `category-name` | 一个对象类。用于定位整个类别的对象；请参阅[按引擎划分的类别名称](#dms-sc-category-names)。 | 

------
#### [ SAP ASE (Sybase ASE) ]


| Key | 选择 | 
| --- | --- | 
| `server-name` | 服务器。 | 
| `database-name` | 服务器上的数据库。 | 
| `schema-name` | 数据库中的架构。 | 
| `table-name` | 默认为表格，或与一起使用时的视图`"table-type": "view"`。 | 
| `table-type` | `"table"`（默认）或`"view"`。 | 
| `materialized-view-name` | 实体化视图。 | 
| `procedure-name` | 存储过程。 | 
| `scalar-function-name` | 一个标量值函数。 | 
| `table-valued-function-name` | 表值函数。 | 
| `user-defined-type-name` | 用户定义的类型。 | 
| `default-name` | 用户定义的默认值。`Describe*`只能通过以下方式到达。 | 
| `category-name` | 一个对象类。用于定位整个类别的对象；请参阅[按引擎划分的类别名称](#dms-sc-category-names)。 | 

------
#### [ PostgreSQL ]


| Key | 选择 | 
| --- | --- | 
| `server-name` | 服务器。 | 
| `schema-name` | 架构。 | 
| `table-name` | 表或视图；`table-type`用于区分。 | 
| `function-name` | 函数 | 
| `procedure-name` | 存储过程。 | 
| `sequence-name` | 一个序列。 | 
| `materialized-view-name` | 实体化视图。 | 
| `type-name` | 用户定义的类型。 | 
| `domain-name` | 一个域名。 | 
| `category-name` | 一个对象类。用于定位整个类别的对象；请参阅[按引擎划分的类别名称](#dms-sc-category-names)。 | 

------
#### [ MySQL ]


| Key | 选择 | 
| --- | --- | 
| `server-name` | 服务器。 | 
| `schema-name` | 架构。 | 
| `table-name` | 表或视图；`table-type`用于区分。 | 
| `procedure-name` | 存储过程。 | 
| `function-name` | 函数 | 
| `event-name` | 事件。 | 
| `category-name` | 一个对象类。用于定位整个类别的对象；请参阅[按引擎划分的类别名称](#dms-sc-category-names)。 | 

------
#### [ IBM Db2 for z/OS ]


| Key | 选择 | 
| --- | --- | 
| `server-name` | 服务器。 | 
| `schema-name` | 架构。 | 
| `table-name` | 表、视图或全局临时表；`table-type`用于区分。 | 
| `table-type` | `"table"`（默认）或`"view"`。 | 
| `procedure-name` | 存储过程或外部过程。 | 
| `function-name` | 一个函数（内联函数、标量函数、源函数、表函数或外部函数）。 | 
| `sequence-name` | 一个序列。 | 
| `alias-name` | 别名。没有 PostgreSQL 目标模型；与一起使用。`StartMetadataModelExportAsScript` `Origin: SOURCE` | 
| `mqtable-name` | 物化查询表 (MQT)。没有 PostgreSQL 目标模型。 | 
| `type-name` | 用户定义的类型（不同类型或结构化类型）。没有 PostgreSQL 目标模型。 | 
| `category-name` | 一个对象类。用于定位整个类别的对象；请参阅[按引擎划分的类别名称](#dms-sc-category-names)。 | 

------
#### [ IBM Db2 LUW ]


| Key | 选择 | 
| --- | --- | 
| `server-name` | 服务器。 | 
| `schema-name` | 架构。 | 
| `table-name` | 表或视图；`table-type`用于区分。 | 
| `procedure-name` | 存储过程。 | 
| `function-name` | 一个函数（标量、源函数或表函数）。 | 
| `sequence-name` | 一个序列。 | 
| `module-name` | 一个模块。 | 
| `category-name` | 一个对象类。用于定位整个类别的对象；请参阅[按引擎划分的类别名称](#dms-sc-category-names)。 | 

------

## 按引擎划分的类别名称
<a name="dms-sc-category-names"></a>

选择规则中的`category-name`值以整个对象类为目标，而不是单个对象。类别名称是特定于引擎的，并且区分大小写。操作是否接受`category-name`取决于该操作，请查看 [Amazon API 参考](https://docs.amazonaws.cn/dms/latest/APIReference/API_Operations.html)以了解您正在使用的操作。以下选项卡涵盖源引擎和目标引擎。

**重要**  
将类别名称从一个引擎发送到为其他引擎配置的项目会返回错误。

------
#### [ SQL Server ]

以下类别名称适用于微软 SQL Server 源代码。


| `category-name` 值 | 它分组了什么 | 
| --- | --- | 
| `Tables` | 基础表。 | 
| `Views` | 观点。 | 
| `Procedures` | 存储过程。 | 
| `SQL scalar functions` | 标量 T-SQL 函数。 | 
| `SQL table-valued functions` | Multi-statement 表值函数。 | 
| `SQL inline functions` | 内联表值函数。 | 
| `Aggregate functions` | User-defined 聚合函数。 | 
| `Synonyms` | T-SQL 同义词。 | 
| `Sequences` | 序列对象。 | 
| `Types` | XML 架构集合和列类型。 | 
| `Table types` | Table-typed 参数声明。 | 
| `User-Defined Types` | 别名和 CLR 用户定义的类型。 | 
| `XML Schema Collections` | XML 架构集合。 | 

------
#### [ Oracle ]

以下类别名称适用于 Oracle 来源。


| `category-name` 值 | 它分组了什么 | 
| --- | --- | 
| `Tables` | 桌子。 | 
| `External Tables` | 外部表。 | 
| `Views` | 观点。 | 
| `Packages` | PL/SQL 包装规格和主体。 | 
| `Procedures` | 存储过程。 | 
| `Functions` | 所有用户函数，包括标量函数和流水线函数。 | 
| `User Defined Types` | 对象类型。 | 
| `Collection Types` | VARRAY 和嵌套表类型。 | 
| `Sequences` | 序列。 | 
| `Materialized Views` | 物化视图。 | 
| `Materialized View Logs` | Materialized-view 更改日志。 | 
| `Synonyms` | 公共和私有同义词。 | 
| `Clusters` | 索引和哈希集群。 | 
| `Database Links` | 数据库链接。 | 

------
#### [ SAP ASE (Sybase ASE) ]

以下类别名称适用于 SAP ASE (Sybase ASE) 源。


| `category-name` 值 | 它分组了什么 | 
| --- | --- | 
| `Tables` | 基础表。 | 
| `Views` | 观点。 | 
| `Procedures` | 存储过程。 | 
| `Scalar Functions` | 标量 T-SQL 函数。 | 
| `Table Valued Functions` | Table-valued 函数。 | 
| `Materialized Views` | 物化视图。 | 
| `User Defined Types` | 别名用户定义的类型。 | 
| `Defaults` | 绑定的默认对象。 Describe-only; 无法独立转换。 | 

------
#### [ PostgreSQL ]

以下类别名称适用于 PostgreSQL 和 Aurora PostgreSQL 目标。


| `category-name` 值 | 它分组了什么 | 
| --- | --- | 
| `Tables` | 基础表。 | 
| `Views` | 观点。 | 
| `Functions` | 函数。 | 
| `Procedures` | 存储过程。 | 
| `Sequences` | 序列。 | 
| `Materialized Views` | 物化视图。 | 
| `Types` | User-defined 类型。 | 
| `Domains` | 域名。 | 

------
#### [ MySQL ]

以下类别名称适用于 MySQL 和 Aurora MySQL 目标。


| `category-name` 值 | 它分组了什么 | 
| --- | --- | 
| `Tables` | 基础表。 | 
| `Views` | 观点。 | 
| `Functions` | 函数。 | 
| `Procedures` | 存储过程。 | 
| `Events` | 活动。 | 

------
#### [ IBM Db2 for z/OS ]

以下类别名称适用于 z/OS 源代码的 IBM Db2。


| `category-name` 值 | 定位器密钥 | 它分组了什么 | 
| --- | --- | --- | 
| `Tables` | `table-name` \+ `"table-type": "table"` | 基础表。 | 
| `Global Temporary Tables` | `table-name` \+ `"table-type": "table"` | 全局临时表。没有 PostgreSQL 目标模型。 | 
| `Materialized Query Tables` | `mqtable-name` | 物化查询表 (MQT)。没有 PostgreSQL 目标模型。 | 
| `Views` | `table-name` \+ `"table-type": "view"` | 观点。 | 
| `Aliases` | `alias-name` | 别名。没有 PostgreSQL 目标模型。 | 
| `Procedures` | `procedure-name` | 存储过程。 | 
| `Functions` | `function-name` | 所有函数子类型：标量、表格、内联、源函数。 | 
| `Sequences` | `sequence-name` | 序列。 | 
| `User Defined Types` | `type-name` | 不同的类型和结构化类型。没有 PostgreSQL 目标模型。 | 
| `External Routines` | `function-name` / `procedure-name` | 外部函数和外部程序。 | 

------
#### [ IBM Db2 LUW ]

以下类别名称适用于 IBM Db2 LUW 目标。


| `category-name` 值 | 它分组了什么 | 
| --- | --- | 
| `Tables` | 基础表。 | 
| `Views` | 观点。 | 
| `Functions` | 函数（标量、源函数、表格）。 | 
| `Procedures` | 存储过程。 | 
| `Sequences` | 序列。 | 
| `Modules` | 模块。 | 

------

## 选择规则示例
<a name="dms-sc-selection-rule-examples"></a>

以下示例说明如何为常见迁移场景编写选择规则。每个示例都使用您将传递给 DMS 架构转换 API 操作的`--selection-rules`参数值，例如`StartMetadataModelConversion`或`StartMetadataModelAssessment`。

### 选择单个表（微软 SQL Server）
<a name="dms-sc-selection-rule-example-single-table"></a>

从微软 SQL Server 源中选择一个特定的表进行转换。微软 SQL Server 还需要`database-name``schema-name`。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "{{rule_name}}",
      "rule-action": "explicit",
      "object-locator": {
        "server-name": "{{source_server}}",
        "database-name": "{{database_name}}",
        "schema-name": "{{schema_name}}",
        "table-name": "{{table_name}}"
      }
    }
  ]
}
```

### 选择整个架构 (Oracle)
<a name="dms-sc-selection-rule-example-whole-schema"></a>

通过省略对象级密钥来选择 Oracle 架构中的所有对象。Oracle 没有`database-name`级别；架构是其下的顶级容器`server-name`。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "{{rule_name}}",
      "rule-action": "explicit",
      "object-locator": {
        "server-name": "{{source_server}}",
        "schema-name": "{{schema_name}}"
      }
    }
  ]
}
```

### 选择视图 (Oracle)
<a name="dms-sc-selection-rule-example-view"></a>

Oracle 视图使用`table-name`和进行寻址`"table-type": "view"`。没有单独的`view-name`密钥。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "{{rule_name}}",
      "rule-action": "explicit",
      "object-locator": {
        "server-name": "{{source_server}}",
        "schema-name": "{{schema_name}}",
        "table-name": "{{view_name}}",
        "table-type": "view"
      }
    }
  ]
}
```

### 选择存储过程（适用 z/OS于 IBM Db2）
<a name="dms-sc-selection-rule-example-procedure-db2"></a>

从 IBM Db2 中选择一个特定的存储过程作为 z/OS 源。IBM Db2 可供 z/OS 使用`procedure-name`，直接从`server-name`到`schema-name`，没有`database-name`级别。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "{{rule_name}}",
      "rule-action": "explicit",
      "object-locator": {
        "server-name": "{{source_server}}",
        "schema-name": "{{schema_name}}",
        "procedure-name": "{{procedure_name}}"
      }
    }
  ]
}
```

### 选择架构中的所有过程 (SAP ASE)
<a name="dms-sc-selection-rule-example-all-procedures"></a>

使用`%`作为通配符，选择 SAP ASE (Sybase ASE) 架构中的每个过程。`procedure-name`SAP ASE (Sybase ASE) 要求`database-name`介于`server-name`和之间。`schema-name`

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "{{rule_name}}",
      "rule-action": "include",
      "object-locator": {
        "server-name": "{{source_server}}",
        "database-name": "{{database_name}}",
        "schema-name": "dbo",
        "procedure-name": "%"
      }
    }
  ]
}
```

### 按通配符模式选择表（微软 SQL Server）
<a name="dms-sc-selection-rule-example-wildcard"></a>

用于`%`按前缀匹配多个表。此示例选择名称以开头的所有表`Fact_`。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "{{rule_name}}",
      "rule-action": "include",
      "object-locator": {
        "server-name": "{{source_server}}",
        "database-name": "{{database_name}}",
        "schema-name": "dbo",
        "table-name": "Fact_%"
      }
    }
  ]
}
```

### 包含架构并按前缀排除对象 (Oracle)
<a name="dms-sc-selection-rule-example-include-exclude"></a>

包括 Oracle 架构中的所有对象，然后排除名称以开头的所有表`TMP_`。规则按`rule-id`顺序进行评估；匹配时优`exclude`先。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "{{rule_name}}",
      "rule-action": "include",
      "object-locator": {
        "server-name": "{{source_server}}",
        "schema-name": "{{schema_name}}"
      }
    },
    {
      "rule-type": "selection",
      "rule-id": "2",
      "rule-name": "{{rule_name}}",
      "rule-action": "exclude",
      "object-locator": {
        "server-name": "{{source_server}}",
        "schema-name": "{{schema_name}}",
        "table-name": "TMP_%"
      }
    }
  ]
}
```

### 选择多个显式程序（微软 SQL Server）
<a name="dms-sc-selection-rule-example-multi-explicit"></a>

在单个文档中使用多个`explicit`规则按名称选择一组特定的过程。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "{{rule_name}}",
      "rule-action": "explicit",
      "object-locator": {
        "server-name": "{{source_server}}",
        "database-name": "{{database_name}}",
        "schema-name": "dbo",
        "procedure-name": "PROC_A"
      }
    },
    {
      "rule-type": "selection",
      "rule-id": "2",
      "rule-name": "{{rule_name}}",
      "rule-action": "explicit",
      "object-locator": {
        "server-name": "{{source_server}}",
        "database-name": "{{database_name}}",
        "schema-name": "dbo",
        "procedure-name": "PROC_B"
      }
    },
    {
      "rule-type": "selection",
      "rule-id": "3",
      "rule-name": "{{rule_name}}",
      "rule-action": "explicit",
      "object-locator": {
        "server-name": "{{source_server}}",
        "database-name": "{{database_name}}",
        "schema-name": "dbo",
        "procedure-name": "PROC_C"
      }
    }
  ]
}
```

### 按前缀包含，按名称排除（微软 SQL Server）
<a name="dms-sc-selection-rule-example-include-exclude-proc"></a>

使用`include`规则匹配名称以开头的每个过程`PROC_`，然后使用要`PROC_TEST`从该集合中删除的`exclude`规则。`exclude`规则必须遵循`include`规则；独立规则`exclude`无效。

```
{
  "rules": [
    {
      "rule-type": "selection",
      "rule-id": "1",
      "rule-name": "{{rule_name}}",
      "rule-action": "include",
      "object-locator": {
        "server-name": "{{source_server}}",
        "database-name": "{{database_name}}",
        "schema-name": "dbo",
        "procedure-name": "PROC_%"
      }
    },
    {
      "rule-type": "selection",
      "rule-id": "2",
      "rule-name": "{{rule_name}}",
      "rule-action": "exclude",
      "object-locator": {
        "server-name": "{{source_server}}",
        "database-name": "{{database_name}}",
        "schema-name": "dbo",
        "procedure-name": "PROC_TEST"
      }
    }
  ]
}
```