protected function _getUpdateFieldsForTable($table, $useSkipSaveFields = true)
    {
        $coreTable = $this->getCoreTableName();

        $skipMultilingual = false;
        $skipCoreFields = false;

        if ($table != $coreTable) {
            $skipCoreFields = true;
        }
        if ($this->_blEmployMultilanguage) {
            if ($table != getLangTableName($coreTable, $this->getLanguage())) {
                $skipMultilingual = true;
            }
        }

        $sql = '';
        $sep = false;
        foreach (array_keys($this->_aFieldNames) as $key) {
            $keyLowercase = strtolower($key);
            if ($keyLowercase != 'oxid') {
                if ($this->_blEmployMultilanguage) {
                    if ($skipMultilingual && $this->isMultilingualField($key)) {
                        continue;
                    }
                    if ($skipCoreFields && !$this->isMultilingualField($key)) {
                        continue;
                    }
                } else {
                    // need to explicitly check field language
                    $fieldLang = $this->_getFieldLang($key);
                    if ($fieldLang) {
                        if ($table != getLangTableName($coreTable, $fieldLang)) {
                            continue;
                        }
                    } elseif ($skipCoreFields) {
                        continue;
                    }
                }
            }

            if (!$this->checkFieldCanBeUpdated($key)) {
                continue;
            }

            $longName = $this->_getFieldLongName($key);
            $field = $this->$longName;

            if (!$useSkipSaveFields || ($useSkipSaveFields && !in_array($keyLowercase, $this->_aSkipSaveFields))) {
                $key = $this->getUpdateSqlFieldName($key);
                $sql .= (($sep) ? ',' : '') . $key . " = " . $this->_getUpdateFieldValue($key, $field);
                $sep = true;
            }
        }

        return $sql;
    }