diff --git a/cmdb-api/api/lib/cmdb/ci_type.py b/cmdb-api/api/lib/cmdb/ci_type.py
index 0c607a8..8c7934d 100644
--- a/cmdb-api/api/lib/cmdb/ci_type.py
+++ b/cmdb-api/api/lib/cmdb/ci_type.py
@@ -10,6 +10,8 @@ from api.lib.cmdb.cache import AttributeCache
 from api.lib.cmdb.cache import CITypeAttributeCache
 from api.lib.cmdb.cache import CITypeAttributesCache
 from api.lib.cmdb.cache import CITypeCache
+from api.lib.cmdb.const import CMDB_QUEUE
+from api.lib.cmdb.value import AttributeValueManager
 from api.lib.decorator import kwargs_required
 from api.models.cmdb import CI
 from api.models.cmdb import CIType
@@ -282,6 +284,8 @@ class CITypeAttributeManager(object):
         :param attr_ids: list
         :return: 
         """
+        from api.tasks.cmdb import ci_cache
+
         cls._check(type_id, attr_ids)
 
         for attr_id in attr_ids:
@@ -292,6 +296,11 @@ class CITypeAttributeManager(object):
             if existed is not None:
                 existed.soft_delete()
 
+                for ci in CI.get_by(type_id=type_id, to_dict=False):
+                    AttributeValueManager.delete_attr_value(attr_id, ci.id)
+
+                    ci_cache.apply_async([ci.id], queue=CMDB_QUEUE)
+
                 CITypeAttributeCache.clean(type_id, attr_id)
 
         CITypeAttributesCache.clean(type_id)
diff --git a/cmdb-api/api/lib/cmdb/value.py b/cmdb-api/api/lib/cmdb/value.py
index f262002..2b53a22 100644
--- a/cmdb-api/api/lib/cmdb/value.py
+++ b/cmdb-api/api/lib/cmdb/value.py
@@ -11,6 +11,7 @@ from api.lib.cmdb.cache import AttributeCache
 from api.lib.cmdb.cache import CITypeAttributeCache
 from api.lib.cmdb.const import ExistPolicy
 from api.lib.cmdb.const import OperateType
+from api.lib.cmdb.const import ValueTypeEnum
 from api.lib.cmdb.history import AttributeHistoryManger
 from api.lib.cmdb.utils import TableMap
 from api.lib.cmdb.utils import ValueTypeMap
@@ -156,7 +157,20 @@ class AttributeValueManager(object):
             existed_value = existed_attr and existed_attr.value
             if existed_value is None:
                 value_table.create(ci_id=ci.id, attr_id=attr.id, value=value)
+
                 self._write_change(ci.id, attr.id, OperateType.ADD, None, value)
             else:
-                existed_attr.update(value=value)
+                if not value and attr.value_type != ValueTypeEnum.TEXT:
+                    existed_attr.delete()
+                else:
+                    existed_attr.update(value=value)
+
                 self._write_change(ci.id, attr.id, OperateType.UPDATE, existed_value, value)
+
+    @staticmethod
+    def delete_attr_value(attr_id, ci_id):
+        attr = AttributeCache.get(attr_id)
+        if attr is not None:
+            value_table = TableMap(attr_name=attr.name).table
+            for item in value_table.get_by(attr_id=attr.id, ci_id=ci_id, to_dict=False):
+                item.delete()
diff --git a/cmdb-ui/src/views/cmdb/ci/index.vue b/cmdb-ui/src/views/cmdb/ci/index.vue
index b51efc5..82aa7e1 100644
--- a/cmdb-ui/src/views/cmdb/ci/index.vue
+++ b/cmdb-ui/src/views/cmdb/ci/index.vue
@@ -132,7 +132,7 @@ export default {
         let q = `q=_type:${this.$router.currentRoute.meta.typeId}`
         Object.keys(params).forEach(key => {
           if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') {
-            if (typeof params[key] === 'object' && params[key].length > 1) {
+            if (typeof params[key] === 'object' && params[key] && params[key].length > 1) {
               q += `,${key}:(${params[key].join(';')})`
             } else if (params[key]) {
               q += `,${key}:*${params[key]}*`
diff --git a/cmdb-ui/src/views/cmdb/relation_views/index.vue b/cmdb-ui/src/views/cmdb/relation_views/index.vue
index eda6ab3..661eae1 100644
--- a/cmdb-ui/src/views/cmdb/relation_views/index.vue
+++ b/cmdb-ui/src/views/cmdb/relation_views/index.vue
@@ -89,7 +89,7 @@ export default {
         let q = ''
         Object.keys(params).forEach(key => {
           if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') {
-            if (typeof params[key] === 'object' && params[key].length > 1) {
+            if (typeof params[key] === 'object' && params[key] && params[key].length > 1) {
               q += `,${key}:(${params[key].join(';')})`
             } else if (params[key]) {
               q += `,${key}:*${params[key]}*`
diff --git a/cmdb-ui/src/views/cmdb/tree_views/index.vue b/cmdb-ui/src/views/cmdb/tree_views/index.vue
index 9b9121b..4258283 100644
--- a/cmdb-ui/src/views/cmdb/tree_views/index.vue
+++ b/cmdb-ui/src/views/cmdb/tree_views/index.vue
@@ -69,7 +69,7 @@ export default {
         let q = `q=_type:${this.typeId}`
         Object.keys(params).forEach(key => {
           if (!['pageNo', 'pageSize', 'sortField', 'sortOrder'].includes(key) && params[key] + '' !== '') {
-            if (typeof params[key] === 'object' && params[key].length > 1) {
+            if (typeof params[key] === 'object' && params[key] && params[key].length > 1) {
               q += `,${key}:(${params[key].join(';')})`
             } else if (params[key]) {
               q += `,${key}:*${params[key]}*`