> ## Documentation Index
> Fetch the complete documentation index at: https://help.dingtalk.io/llms.txt
> Use this file to discover all available pages before exploring further.

# INSERT - 插入

> 本文介绍了INSERT公式在数据管理中的应用，包括其格式、使用案例以及注意事项。通过具体示例说明了如何将数据从当前录入表插入到目标表中，并解释了与UPSERT公式的区别及限制条件。

INSERT 公式主要用于把当前录入表的数据插入到目标表中，比如在车辆管理中，需要将车辆信息插入到车辆管理系统中，当前录入表的数据既可以来自于普通组件，也可以来自于子表单组件。如果是子表单组件，则会把明细数据分成多条插入到目标表中，但是最多只能使用一个子表单组件。

## 格式

`INSERT()`函数的格式为：

```javascript theme={"theme":{"light":"github-light","dark":"github-dark"}}
INSERT(目标表,目标列1,目标值1,目标列2,目标值2....)
```

* 目标表 ：要插入数据的表单
* 目标列 ：目标表中某个组件，INSERT只支持往目标表中的普通组件插入数据，不支持往目标表中的子表单中插入数据。
* 目标值 ：

## 使用案例

以下内容将通过两个使用案例，来协助你更好的理解和使用`INSERT()`函数。

### 案例一：目标值来自于普通组件

**场景**

* 商品表 :  商品名，存货量，商品类别，商品类别描述
* 商品类别表 ：商品类别，商品类别描述

**需求**
当在「商品表」中添加一条数据时，要把「商品表」中的商品类别和类别描述插入一条数据到「商品类别」表中。

<Frame>
  ![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1623902446468-00a199f9-b62c-424b-98cf-0352d9e4e860.png)
</Frame>

### 案例二：目标值来自于一个子表单组件

假设目标值中包含子表单组件。那么子表单下有几条数据，就会拆开往目标表中插入几条数据。

**场景**

* 当前录入表是「进货表」，有「进货单号」,「进货日期」,「子表单」(子表单下有商品名，进货量)。
* 插入数据的目标表是「存货表」，有「进货单号」，「进货日期」，「商品名」，「进货量」四个组件。

**需求**

在进货表中提交数据进货，子表单下有 N 条数据，那么数据提交后，「存货表」要插入 N 条数据。

* 在「进货表」的「业务关联规则」中，配置 INSERT 函数如下 ：
* 目标表选「存货表」，目标列选「存货表.商品名」，目标值为来自于「当前提交数据表」下的「子表单」下的商品名。
* 进货表的子表单下有几个商品，最后「存货表」中就会插入几条数据。对于子表单外的进货单号，进货日期，插入的每条数据都是相同的。

<Frame>
  ![](https://yida-support.oss-cn-shanghai.aliyuncs.com/static/png/1623901727477-00e82273-36a7-4aaa-80ed-6c6be654aad4.png)
</Frame>

## 注意事项

* INSERT和UPSERT使用场景的差异

INSERT 公式是不管目标表中是否有同样的数据存在，都可以插入。但有时我们希望如果数据存在，则只做更新；目标数据不存在再插入，对于这种功能，可以用高级公式-UPSERT 实现。

* 高级公式支持的组件范围如下

* INSERT可以插入数据条数限制

* 暂不支持目标值来自于多个子表单组件的场景。

例如：假如目标值来自于多个子表单，子表单 A 有 M 条数据，子表单 B 有 N 条数据，那最后拆开往目标表中插入多少条数据呢？是 M\*N 条吗？如果是这样，那么数据就会重复，出现统计错误
