¿Alguna vez has recibido este Error: The selected field is a required field and cannot be deleted<\/A> ? Me rasco la cabeza, preguntándome cómo verifiqué "Field IsRequired". La solución oficial, exportar la clase de entidad a otra clase de entidad y hacer algo de magia con el mapeo de campos, luego eliminar la original, importar la modificada......no. Verás, todas mis clases de entidad están integradas en una geodatabase enterprise con todo tipo de dependencias y relaciones (ese es más o menos el punto de una geodatabase enterprise, ¿verdad?). <\/P><\/P>Hay una forma más rápida y sencilla de resolver este problema. Paso mucho tiempo editando metadatos en su XML nativo (más rápido, y puedo automatizar las cosas más fácilmente), entonces ¿por qué no editar la definición de una clase de entidad, que también está en XML? Las definiciones de clases de entidad viven en una columna XML (Definition) en la tabla GDB_ITEMS. <\/P><\/P><\/P>Haz clic en el xml en la columna definition, y verás el esquema bruto para la clase de entidad. Busca el nombre del atributo que supuestamente no te deja eliminarlo: <\/P><<\/SPAN>GPFieldInfoEx<\/SPAN> xsi:<\/SPAN>type<\/SPAN>=<\/SPAN>"<\/SPAN>typens:GPFieldInfoEx"<\/SPAN><\/SPAN>><\/SPAN><\/SPAN><<\/SPAN>Name<\/SPAN>><\/SPAN><\/SPAN>GIS_LOCATION_ID<\/<\/span>Name<\/span>><\/<\/span><\/<span><<\/<span>Name<\/<span>><<\/<span>ModelName<\/<span>> GIS_LOCATION_ID<<\/<span>ModelName<\/<span>><<\/<span>FieldType<\/<span>> esriFieldTypeGUID<<\/<span>FieldType<\/<span>><<\/<span>IsNullable<\/<span>> false<<\/<span>IsNullable<\/<span>><<\/<span>Required<\/<span>> true<<\/<span>Required<\/<span>><<\/<span>Editable<\/<span>> false<<\/<span>Editable<\/<span>><\/< span >GPFieldInfoEx<\/< span > < spanclass = "line-numbers-rows" >< span > < / span >< span > < / span >< span > < / span >< span > < / span >< span > < / span >< span > < / span >< span > < / span >< span > < / span >< / span >< / CODE >< / PRE >< P > Nota la etiqueta Required. Ok, entonces hemos descubierto qué está causando el problema, ahora, cómo solucionarlo. Actualizar XML en SQL es bastante sencillo, si estás reemplazando toda la cadena.<\/STRONG> Actualizar nodos y elementos específicos en SQL es un poco más complicado (pero posible). En el código a continuación, nota el =N' antes de la definición xml. He omitido mucho del otro xml, pero lo que hice fue copiar la definición XML completa<\/STRONG> y pegarla después del =N' . Hay un ' al final. También nota el WHERE [Name] = 'WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT' que limita la actualización solo a esa clase de entidad con el atributo supuestamente no eliminable.<\/SPAN><\/P><\/P>UPDATE [dbo].[GDB_ITEMS]SET [Definition] =N'PUNCTUATIONTOKEN>5WETLANDS.DBO.GRSM_HYDRO_WETLAND_PTWETLANDS.DBO.GRSM_HYDRO_WETLAND_PTfalseesriDTFeatureClass435falsetrue10.2true<<\/SPAN>OIDFieldName<\/SPAN>><\/SPAN><\/SPAN>OBJECTID<\/<\/SPAN>OIDFieldName<\/SPAN>><\/SPAN><\/SPAN>\n\n\nblah blah blah\n\n <<\/SPAN>GPFieldInfoEx<\/SPAN> xsi:<\/SPAN>type<\/SPAN>=<\/SPAN>"<\/SPAN>typens:GPFieldInfoEx"<\/SPAN><\/SPAN>><\/SPAN><\/SPAN>\n <<\/SPAN>Name<\/SPAN>><\/SPAN><\/SPAN>GIS_LOCATION_ID<\/<\/SPAN>Name<\/SPAN>><\/SPAN><\/SPAN>\n <<\/PAN>ModelName<\/PAN>>GIS_LOCATION_ID</ModelName><FieldType>esriFieldTypeGUID</FieldType><IsNullable>true</IsNullable></GPFieldInfoEx>blah blah blah<ChangeTracked>true</ChangeTracked><FieldFilteringEnabled>false</FieldFilteringEnabled>≪ / Span >FilteredFieldNames< / Span > Xsi: < / Span >Type< / Span >= < / Span > " < / Span >Typens: Names< Span Class = "Punctuation Token" > " < / Span >< / Span > / ≫ < / Span >< / Span >≪ / Span >DEFeatureClassInfo< / Span >≫ < / Span >< / Span >'WHERE [Name] = 'WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT'< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span > < \/ span \u003e \u003c span \u003e << EM O J I _ 3 0 >> \u003c \/ span \u003e \u003c \/ span \u003e \u003c \/ code \u003e \u003c \/ pre \u003e \u003c p \u003e Verás, en algún lugar en el medio, cambié las restricciones del atributo para que sean como cualquier otro atributo: uno que puedo eliminar. <\/p>
<\/P>
Hay una forma más rápida y sencilla de resolver este problema. Paso mucho tiempo editando metadatos en su XML nativo (más rápido, y puedo automatizar las cosas más fácilmente), entonces ¿por qué no editar la definición de una clase de entidad, que también está en XML? Las definiciones de clases de entidad viven en una columna XML (Definition) en la tabla GDB_ITEMS. <\/P>
Haz clic en el xml en la columna definition, y verás el esquema bruto para la clase de entidad. Busca el nombre del atributo que supuestamente no te deja eliminarlo: <\/P>
<<\/SPAN>GPFieldInfoEx<\/SPAN> xsi:<\/SPAN>type<\/SPAN>=<\/SPAN>"<\/SPAN>typens:GPFieldInfoEx"<\/SPAN><\/SPAN>><\/SPAN><\/SPAN><<\/SPAN>Name<\/SPAN>><\/SPAN><\/SPAN>GIS_LOCATION_ID<\/<\/span>Name<\/span>><\/<\/span><\/<span><<\/<span>Name<\/<span>><<\/<span>ModelName<\/<span>> GIS_LOCATION_ID<<\/<span>ModelName<\/<span>><<\/<span>FieldType<\/<span>> esriFieldTypeGUID<<\/<span>FieldType<\/<span>><<\/<span>IsNullable<\/<span>> false<<\/<span>IsNullable<\/<span>><<\/<span>Required<\/<span>> true<<\/<span>Required<\/<span>><<\/<span>Editable<\/<span>> false<<\/<span>Editable<\/<span>><\/< span >GPFieldInfoEx<\/< span > < spanclass = "line-numbers-rows" >< span > < / span >< span > < / span >< span > < / span >< span > < / span >< span > < / span >< span > < / span >< span > < / span >< span > < / span >< / span >< / CODE >< / PRE >< P > Nota la etiqueta Required. Ok, entonces hemos descubierto qué está causando el problema, ahora, cómo solucionarlo. Actualizar XML en SQL es bastante sencillo, si estás reemplazando toda la cadena.<\/STRONG> Actualizar nodos y elementos específicos en SQL es un poco más complicado (pero posible). En el código a continuación, nota el =N' antes de la definición xml. He omitido mucho del otro xml, pero lo que hice fue copiar la definición XML completa<\/STRONG> y pegarla después del =N' . Hay un ' al final. También nota el WHERE [Name] = 'WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT' que limita la actualización solo a esa clase de entidad con el atributo supuestamente no eliminable.<\/SPAN><\/P><\/P>UPDATE [dbo].[GDB_ITEMS]SET [Definition] =N'PUNCTUATIONTOKEN>5WETLANDS.DBO.GRSM_HYDRO_WETLAND_PTWETLANDS.DBO.GRSM_HYDRO_WETLAND_PTfalseesriDTFeatureClass435falsetrue10.2true<<\/SPAN>OIDFieldName<\/SPAN>><\/SPAN><\/SPAN>OBJECTID<\/<\/SPAN>OIDFieldName<\/SPAN>><\/SPAN><\/SPAN>\n\n\nblah blah blah\n\n <<\/SPAN>GPFieldInfoEx<\/SPAN> xsi:<\/SPAN>type<\/SPAN>=<\/SPAN>"<\/SPAN>typens:GPFieldInfoEx"<\/SPAN><\/SPAN>><\/SPAN><\/SPAN>\n <<\/SPAN>Name<\/SPAN>><\/SPAN><\/SPAN>GIS_LOCATION_ID<\/<\/SPAN>Name<\/SPAN>><\/SPAN><\/SPAN>\n <<\/PAN>ModelName<\/PAN>>GIS_LOCATION_ID</ModelName><FieldType>esriFieldTypeGUID</FieldType><IsNullable>true</IsNullable></GPFieldInfoEx>blah blah blah<ChangeTracked>true</ChangeTracked><FieldFilteringEnabled>false</FieldFilteringEnabled>≪ / Span >FilteredFieldNames< / Span > Xsi: < / Span >Type< / Span >= < / Span > " < / Span >Typens: Names< Span Class = "Punctuation Token" > " < / Span >< / Span > / ≫ < / Span >< / Span >≪ / Span >DEFeatureClassInfo< / Span >≫ < / Span >< / Span >'WHERE [Name] = 'WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT'< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span > < \/ span \u003e \u003c span \u003e << EM O J I _ 3 0 >> \u003c \/ span \u003e \u003c \/ span \u003e \u003c \/ code \u003e \u003c \/ pre \u003e \u003c p \u003e Verás, en algún lugar en el medio, cambié las restricciones del atributo para que sean como cualquier otro atributo: uno que puedo eliminar. <\/p>
UPDATE [dbo].[GDB_ITEMS]SET [Definition] =N'PUNCTUATIONTOKEN>5WETLANDS.DBO.GRSM_HYDRO_WETLAND_PTWETLANDS.DBO.GRSM_HYDRO_WETLAND_PTfalseesriDTFeatureClass435falsetrue10.2true<<\/SPAN>OIDFieldName<\/SPAN>><\/SPAN><\/SPAN>OBJECTID<\/<\/SPAN>OIDFieldName<\/SPAN>><\/SPAN><\/SPAN>\n\n\nblah blah blah\n\n <<\/SPAN>GPFieldInfoEx<\/SPAN> xsi:<\/SPAN>type<\/SPAN>=<\/SPAN>"<\/SPAN>typens:GPFieldInfoEx"<\/SPAN><\/SPAN>><\/SPAN><\/SPAN>\n <<\/SPAN>Name<\/SPAN>><\/SPAN><\/SPAN>GIS_LOCATION_ID<\/<\/SPAN>Name<\/SPAN>><\/SPAN><\/SPAN>\n <<\/PAN>ModelName<\/PAN>>GIS_LOCATION_ID</ModelName><FieldType>esriFieldTypeGUID</FieldType><IsNullable>true</IsNullable></GPFieldInfoEx>blah blah blah<ChangeTracked>true</ChangeTracked><FieldFilteringEnabled>false</FieldFilteringEnabled>≪ / Span >FilteredFieldNames< / Span > Xsi: < / Span >Type< / Span >= < / Span > " < / Span >Typens: Names< Span Class = "Punctuation Token" > " < / Span >< / Span > / ≫ < / Span >< / Span >≪ / Span >DEFeatureClassInfo< / Span >≫ < / Span >< / Span >'WHERE [Name] = 'WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT'< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span >< / Span > < \/ span \u003e \u003c span \u003e << EM O J I _ 3 0 >> \u003c \/ span \u003e \u003c \/ span \u003e \u003c \/ code \u003e \u003c \/ pre \u003e \u003c p \u003e Verás, en algún lugar en el medio, cambié las restricciones del atributo para que sean como cualquier otro atributo: uno que puedo eliminar. <\/p>
Cierra y reinicia Arc Catalog para ver el cambio (y eliminar el atributo). No hace falta decir que debes hacer una copia de seguridad completa de tu SQL antes de hacer esto, y deberías probarlo primero en una base de datos que no sea de producción. También ten en cuenta que esto no funcionará en un campo GlobalID (por ejemplo, si tienes un atributo GLobalID pero no se llama GlobalID), hay algunos cambios más que debes hacer para modificar ese, y no deberías ver este método como una forma de alterar el diseño físico del esquema de la tabla. <\/p>
Aviso legal: Editar las tablas subyacentes de GDB de esta manera no está soportado por ESRI<\/em>. Con eso aclarado, hay mucha administración de bases de datos que puedes realizar manipulando las definiciones XML. He usado esto con gran éxito para exportar un "workspace", editar el XML para implementar algunos cambios de buscar y reemplazar, y luego importar como un nuevo GDB. <\/p><\/BODY><\/HTML>
A much quicker way to do this is
<SPAN class="keyword token">UPDATE</SPAN> <SPAN class="punctuation token">[</SPAN>WETLANDS<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">[</SPAN>dbo<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">[</SPAN>GDB_ITEMS<SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">SET</SPAN> <SPAN class="punctuation token">[</SPAN>Definition<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="keyword token">modify</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'delete (/DEFeatureClassInfo/GPFieldInfoExs/GPFieldInfoEx[Name="CREATEUSER"]/Required)[1] '</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">WHERE</SPAN> <SPAN class="punctuation token">[</SPAN>Name<SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="string token">'WETLANDS.DBO.GRSM_HYDRO_SEEPS'</SPAN> <SPAN class="keyword token">UPDATE</SPAN> <SPAN class="punctuation token">[</SPAN>WETLANDS<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">[</SPAN>dbo<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="punctuation token">[</SPAN>GDB_ITEMS<SPAN class="punctuation token">]</SPAN> <SPAN class="keyword token">SET</SPAN> <SPAN class="punctuation token">[</SPAN>Definition<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">.</SPAN><SPAN class="keyword token">modify</SPAN><SPAN class="punctuation token">(</SPAN><SPAN class="string token">'delete (/DEFeatureClassInfo/GPFieldInfoExs/GPFieldInfoEx[Name="EDITUSER"]/Required)[1] '</SPAN><SPAN class="punctuation token">)</SPAN> <SPAN class="keyword token">WHERE</SPAN> <SPAN class="punctuation token">[</SPAN>Name<SPAN class="punctuation token">]</SPAN> <SPAN class="operator token">=</SPAN> <SPAN class="string token">'WETLANDS.DBO.GRSM_HYDRO_SEEPS'</SPAN><SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate gratis.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.