Erro: O campo selecionado é um campo obrigatório e não pode ser excluído<\/A> ? Coçando a cabeça, me perguntando como verifiquei "Field IsRequired". A solução oficial, exportar a classe de feição para outra classe de feição e fazer alguma mágica de mapeamento de campo, depois excluir a original, importar a alterada......não. Veja, todas as minhas classes de feição estão incorporadas em um geodatabase enterprise com todos os tipos de dependências e relacionamentos (esse é meio que o objetivo de um geodatabase enterprise, certo?). <\/P><\/P>
Existe uma maneira mais rápida e fácil de resolver esse problema. Eu passo muito tempo editando metadados em seu XML nativo (mais rápido, e posso automatizar as coisas com mais facilidade), então por que não editar a definição da classe de feição, que também está em XML? As definições da classe de feição vivem em uma coluna XML (Definition) na tabela GDB_ITEMS. <\/P>
<\/P>
<\/P>
Clique no xml na coluna definition, e você verá o esquema bruto para a classe de feição. Procure o nome do atributo que supostamente não permite que você o exclua: <\/P>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>GPFieldInfoEx<\/SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:<\/SPAN>type<\/SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=<\/SPAN><SPAN class="punctuation token">"<\/SPAN>typens:GPFieldInfoEx<SPAN class="punctuation token">"<\/SPAN><\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>Name<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>GIS_LOCATION_ID<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>Name<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>ModelName<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>GIS_LOCATION_ID<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>ModelName<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>
<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/PAN>FieldType<\/PAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>esriFieldTypeGUID<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/PAN>FieldType<\/PAN><span class='punctuation'>></span></span>
<span class='token tag'><span class='token tag'><span class='punctuation'></</span>IsNullable</span><span class='punctuation'>></span></span>false<span class='token tag'><span class='token tag'><span class='punctuation'></</span>IsNullable</span><span class='punctuation'>></span></span>
<span class='token tag'><span class='token tag'><span class='punctuation'></</span>Required</span><span class='punctuation'>></span></span>true<span class='token tag'><span class='token tag'><span class='punctuation'></</span>Required</span><span class='punctuation'>></span></span>
<span class='token tag'><span class='token tag'><span class='punctuation'></</span>Editable</span><span class='punctuation'>></span></span>false<span class='token tag'><span class='token tag'><span class='punctuation'></</span>Editable</span><span class='punctuation'>></span></span>
<span class='token tag'><span class='token tag'><span class='punctuation'></</span>GPFieldInfoEx</span><span class='punctuation'>></span></span><span class='line-numbers-rows'><span><<EMOJI_0>></span><span><<EMOJI_1>></span><span><<EMOJI_2>></span><span><<EMOJI_3>></span><span><<EMOJI_4>></span><span><<EMOJI_5>></span><span><<EMOJI_6>></span><span><<EMOJI_7>></span></span>
Note a etiqueta Required. Ok, então descobrimos o que está causando o problema, agora, como consertar. Atualizar XML no SQL é bastante simples, se você estiver substituindo toda a string.<\/STRONG> Atualizar nós e elementos específicos no SQL é um pouco mais complicado (mas possível). No código abaixo, note o =N' antes da definição xml. Eu deixei de fora muito do outro xml, mas o que eu fiz foi copiar a definição XML inteira<\/STRONG> e colá-la após o =N' . Há um ' no final. Também note o WHERE [Name] = 'WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT' que restringe a atualização apenas para essa classe de feição com o atributo supostamente não deletável.<\/SPAN><\/P><\/P>UPDATE [dbo].[GDB_ITEMS]
SET [Definition] =N'<Span style=\"color:#0000ff\"><DEFeatureClassInfo xmlns:xsi=\"http:\/\/www.w3.org/2001/XMLSchema-instance\" xmlns:xs=\"http:\/\/www.w3.org/2001/XMLSchema\" xmlns:typens=\"http:\/\/www.esri.com/schemas/ArcGIS/10.5\" xsi:type=\"typens:DEFeatureClassInfo\">\n <CatalogPath>\\WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT<\CatalogPath>\n <Name>WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT<\Name>\n <ChildrenExpanded>false<\ChildrenExpanded>\n <DatasetType>esriDTFeatureClass<\DatasetType>\n <DSID>435<\DSID>\n <Versioned>false<\Versioned>\n <CanVersion>true<\CanVersion>\n <ConfigurationKeyword \/>\n <RequiredGeodatabaseClientVersion>10.2<\RequiredGeodatabaseClientVersion>\n <HasOID>true<\HasOID>\n <Span class="token tag"><SPAN class="punctuation token"><<\/SPAN>OIDFieldName<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>OBJECTID<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>OIDFieldName<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>\n\n\nblah blah blah\n\n <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>GPFieldInfoEx<\/SPAN> <SPAN class="attr-name token"><SPAN class="namespace token">xsi:<\/SPAN>type<\/SPAN><SPAN class="attr-value token"><SPAN class="punctuation token">=<\/SPAN><SPAN class="punctuation token">"<\/SPAN>typens:GPFieldInfoEx<SPAN class="punctuation token">"<\/SPAN><\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>\n <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>Name<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>GIS_LOCATION_ID<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/SPAN>Name<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>\n <SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><<\/SPAN>ModelName<\/SPAN><SPAN class="punctuation token">><\/SPAN><\/SPAN>GIS_LOCATION_ID<SPAN class="token tag"><SPAN class="token tag"><SPAN class="punctuation token"><\/<\/Span>ModelName<\/span><span class="punctuation token">><\/span><\/span>\n <span class="token tag"><span class="token tag"><span class="punctuation token"><<\/span>FieldType<\/span><span class="punctuation token">><\/span><\/span>esriFieldTypeGUID<span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>FieldType<\/span><span class="punctuation token">><\/span><\/span>\n <span class="token tag"><span class="token tag"><span class="punctuation token"><<\/span>IsNullable<\/span><span class="punctuation token">><\/span><\/span>true<span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>IsNullable<\/span><span class="punctuation token">><\/span><\/span>\n <span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>GPFieldInfoEx<\/span><span class="punctuation token">><\/span><\/span>\n\nblah blah blah\n\n <span class="token tag"><span class="token tag"><span class="punctuation token"><<\/span>ChangeTracked<\/span><span class="punctuation token">><\/span><\/span>true<span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>ChangeTracked<\/span><span class="punctuation token">><\/span><\/span>\n <span class="token tag"><span class="token tag"><span class="punctuation token"><<\/span>FieldFilteringEnabled<\/span><span class="punctuation token">><\/span><\/span>false<span class="token tag"><span class="token tag"><span class="punctuation token"><\/<\/span>FieldFilteringEnabled<\/span><span class="punctuation token">><\/span><\/span>\n <span class="token tag"><span class="token tag"><span class="punctuation token"><<\/span>FilteredFieldNames<\/span> <span class="attr-name token"><Span Class= "namespace Token" > xsi:< /Span > type < /Span ><Span Class= "attr-value Token" > = < /Span ><Span Class= "Punctuation Token" > " < /Span > typens:Names < Span Class= "Punctuation Token" > " < /Span >< /Span > < Span Class= "Punctuation Token" > / & gt ; < /Span >< /Span > \ n < Span Class= "Token Tag" >< Span Class= "Token Tag" >< Span Class= "Punctuation Token" > & lt ; \/ < /Span > DEFeatureClassInfo < /Span >< Span Class= "Punctuation Token" > & gt ; < /Span >< /Span > ' \ n WHERE [Name] = 'WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT' < Span Class= "Line-Numbers-Rows" >< Span > << EMOJI_0 >> < /Span >< Span > << EMOJI_1 >> < /Span >< Span > << EMOJI_2 >> < /Span >< Span > << EMOJI_3 >> < /Span >< Span > << EMOJI_4 >> < /Span >< Span > << EMOJI_5 >> < /Span >< Span > << EMOJI_6 >> < /Span >< Span > << EMOJI_7 >> < /Span >< Span > << EMOJI_8 >> < /Span >< Span > << EMOJI_9 >> < /Span >< Span > << EMOJI_10 >> < /Span >< Span > << EMOJI_11 >> < /Span >< Span > << EMOJI_12 >> < /Span >< Span > << EMOJI_13 >> < /Span >< Span > << EMOJI_14 >> < /Span >< Span > << EMOJI_15 >> < /Span >< Span > << EMOJI_16 >> < /Span >< Span > << EMOJI_17 >> < /Span >< Span > << EMOJI_18 >> < /Span >< Span > << EMOJI_19 >> < /Span >< Span > << EMOJI_20 >> < /Span >< Span > << EMOJI_21 >> < /Span >< Span > << EMOJI_22 >> < /Span >< Span > << EMOJI_23 >> < /Span >< Span > << EMOJI_24 >> < /Span >< Span > << EMOJI_25 >> < /Span >< Span > << EMOJI_26 >> < /Span >< Span > << EMOJI_27 >> < /Span >< Span > << EMOJI_28 >> < /Span >< Span > << EMOJI_29 >> < /Span >< Span > << EMOJI_30 >> < /Span ></Span>Você verá, em algum lugar no meio, que eu mudei as restrições do atributo para ser como qualquer outro atributo: um que eu posso deletar.
Feche e reinicie o Arc Catalog para ver a mudança (e deletar o atributo). Nem é preciso dizer que você deve fazer um backup completo do seu SQL antes de fazer isso, e deve testar isso em um banco de dados que não seja de produção, primeiro! Também note que isso não funcionará em um campo GlobalID (por exemplo, se você tem um atributo GLobalID mas ele não se chama GlobalID), há algumas mudanças a mais que você precisa fazer para alterar esse, e você não deve ver esse método como uma forma de alterar o design físico do esquema da tabela.
Aviso Legal: Editar as tabelas GDB subjacentes dessa maneira não é suportado pela ESRI. Com isso esclarecido, há muita administração de BD que você pode realizar manipulando as definições XML. Eu usei isso com grande sucesso ao exportar um "workspace", editar o XML para implementar algumas alterações de localizar e substituir, e depois importar como um novo GDB.