Haben Sie schon einmal diesen Fehler: Das ausgewählte Feld ist ein Pflichtfeld und kann nicht gelöscht werden<\/A> erhalten? Ich kratze mir am Kopf und frage mich, wie ich "Field IsRequired" überprüft habe. Die offizielle Lösung lautet, die Feature-Class in eine andere Feature-Class zu exportieren und etwas Field-Mapping-Magie anzuwenden, dann die Originale zu löschen und die geänderte zu importieren......nicht. Sehen Sie, alle meine Feature-Classes sind in eine Enterprise-Geodatabase eingebettet mit allen möglichen Abhängigkeiten und Beziehungen (das ist ja irgendwie der Sinn einer Enterprise-Geodatabase, oder?). <\/P><\/P>Es gibt einen schnelleren und einfacheren Weg, dieses Problem zu lösen. Ich verbringe viel Zeit damit, Metadaten in ihrem nativen XML zu bearbeiten (schneller, und ich kann Dinge leichter automatisieren), warum also nicht eine Feature-Class-Definition bearbeiten, die ebenfalls in XML vorliegt? Feature-Class-Definitionen befinden sich in einer XML-Spalte (Definition) in der GDB_ITEMS-Tabelle. <\/P><\/P><\/P>Klicken Sie auf das XML in der Definitionsspalte, und Sie sehen das rohe Schema für die Feature-Class. Suchen Sie nach dem Namen des Attributs, das angeblich nicht gelöscht werden kann: <\/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>Name<\/<span><<\/<span>Name<\/<span><<\/<span>Name<\/<span><<\/<span>Name<\/<span><<\/<span>Name<\/<span><<\/<span>Name<\/<span> <ModelName>GIS_LOCATION_ID</ModelName> <FieldType>esriFieldTypeGUID</FieldType> <IsNullable>false</IsNullable> <Required>true</Required> <Editable>false</Editable> </GPFieldInfoEx> Beachten Sie das Required-Tag. Ok, wir haben herausgefunden, was das Problem verursacht, jetzt wie man es behebt. Das Aktualisieren von XML in SQL ist ziemlich einfach, wenn Sie den gesamten String ersetzen.(replacing the entire string.<\/STRONG>) Das Aktualisieren bestimmter Knoten und Elemente in SQL ist etwas kniffliger (aber möglich). Im folgenden Code beachten Sie das =N' vor der XML-Definition. Ich habe viel von dem anderen XML weggelassen, aber was ich getan habe, war die gesamte XML-Definition zu kopieren und sie nach dem =N' einzufügen. Am Ende steht ein '. Beachten Sie auch das WHERE [Name] = 'WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT', das das Update auf genau diese Feature-Class mit dem angeblich nicht löschbaren Attribut beschränkt.<\/SPAN><\/P><\/P>UPDATE [dbo].[GDB_ITEMS]SET [Definition] =N'<<\/SPAN>DEFeatureClassInfo<\/SPAN> xmlns:<\/SPAN>xsi<\/SPAN>=<\/SPAN>"<\/SPAN>http:\/\/www.w3.org\/2001\/XMLSchema-instance<\/A>"<\/SPAN><\/SPAN> xmlns:<\/SPAN>xs<\/SPAN>=<\/SPAN>"<\/SPAN>http:\/\/www.w3.org\/2001\/XMLSchema<\/A>"<\/SPAN><\/SPAN> xmlns:<\/SPAN>typens<\/SPAN>=<\/SPAN>"<\/SPAN>http:\/\/www.esri.com\/schemas\/ArcGIS\/10.5<\/A>"<\/SPAN><\/SPAN> xsi:<\/Namespace>type<<\/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 <<\/SPAN>ModelName<\/SPAN>><\/SPAN><\/SPAN>GIS_LOCATION_ID<\/<\/Span>ModelName<\/Span>><\/span><\/span>\n <\/FieldTypeesriFieldTypeGUID<\/FieldType>\n <\/IsNullabletrue<\/IsNullable>\n <\/GPFieldInfoEx>\n\nblah blah blah\n\n <\/ChangeTrackedtrue<\/ChangeTracked>\n <\/FieldFilteringEnabledfalse<\/FieldFilteringEnabled>\n < spanclass= "tokentag" >< spanclass= "tokentag" >< spanclass= "punctuationtoken" > </FilteredFieldNames< spanclass= "namespace tokentoken" > xsi:< / span > type < / span > < spanclass= "attr-value tokentoken" > = < / span > < spanclass= "punctuation tokentoken" > " < / span > typens:Names < spanclass= "punctuation tokentoken" > " < / span > < / span > < spanclass= "punctuation tokentoken" > / & gt ; < / span > < / span > \ n < spanclass= "tokentag" >< spanclass= "tokentag" >< spanclass= "punctuationtokentoken" > & lt ; / DEFeatureClassInfo < / span > < spanclass= "punctuationtokentoken" > & gt ; < / span > < / span > ' \ n WHERE [Name] = 'WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT' < spanclass= "line-numbers-rows" >< 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 >< 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 > < / sp an>< sp an > << EM OJ I _ 28 >> </ sp an > << EM OJ I _ 29 >> </ sp an > << EM OJ I _ 30 >> </ sp an ></ sp an ></ CODE ></ PRE ></ P > Sie werden sehen, irgendwo in der Mitte habe ich die Attributbeschränkungen so geändert, dass sie wie jedes andere Attribut sind: eines, das ich löschen kann. <\/P><\/P>Schließen Sie Arc Catalog und starten Sie es neu, um die Änderung zu sehen (und das Attribut zu löschen). Es versteht sich von selbst, dass Sie vor diesem Vorgang eine vollständige Sicherung Ihrer SQL-Datenbank erstellen sollten und dies zuerst in einer Nicht-Produktionsdatenbank testen sollten! Beachten Sie auch, dass dies bei einem GlobalID-Feld nicht funktioniert (z. B. wenn Sie ein GLobalID-Attribut haben, das aber nicht GlobalID heißt), da Sie dort noch einige weitere Änderungen vornehmen müssen, und Sie sollten diese Methode nicht als Möglichkeit betrachten, das physische Design des Tabellenschemas zu ändern. <\/P><\/P>Haftungsausschluss: Das Bearbeiten der zugrunde liegenden GDB-Tabellen auf diese Weise wird von ESRI nicht unterstützt.<\/EM><\/STRONG>. Damit aus dem Weg geräumt ist, gibt es viele Datenbankverwaltungsaufgaben, die Sie durch Manipulation der XML-Definitionen durchführen können. Ich habe dies mit großem Erfolg verwendet, um einen „workspace“ zu exportieren, die XML zu bearbeiten, um einige Suchen-und-Ersetzen-Änderungen vorzunehmen, und dann als neue GDB zu importieren. <\/P><\/BODY><\/HTML>
<\/P>
Es gibt einen schnelleren und einfacheren Weg, dieses Problem zu lösen. Ich verbringe viel Zeit damit, Metadaten in ihrem nativen XML zu bearbeiten (schneller, und ich kann Dinge leichter automatisieren), warum also nicht eine Feature-Class-Definition bearbeiten, die ebenfalls in XML vorliegt? Feature-Class-Definitionen befinden sich in einer XML-Spalte (Definition) in der GDB_ITEMS-Tabelle. <\/P>
Klicken Sie auf das XML in der Definitionsspalte, und Sie sehen das rohe Schema für die Feature-Class. Suchen Sie nach dem Namen des Attributs, das angeblich nicht gelöscht werden kann: <\/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>Name<\/<span><<\/<span>Name<\/<span><<\/<span>Name<\/<span><<\/<span>Name<\/<span><<\/<span>Name<\/<span><<\/<span>Name<\/<span> <ModelName>GIS_LOCATION_ID</ModelName> <FieldType>esriFieldTypeGUID</FieldType> <IsNullable>false</IsNullable> <Required>true</Required> <Editable>false</Editable> </GPFieldInfoEx>
Beachten Sie das Required-Tag. Ok, wir haben herausgefunden, was das Problem verursacht, jetzt wie man es behebt. Das Aktualisieren von XML in SQL ist ziemlich einfach, wenn Sie den gesamten String ersetzen.(replacing the entire string.<\/STRONG>) Das Aktualisieren bestimmter Knoten und Elemente in SQL ist etwas kniffliger (aber möglich). Im folgenden Code beachten Sie das =N' vor der XML-Definition. Ich habe viel von dem anderen XML weggelassen, aber was ich getan habe, war die gesamte XML-Definition zu kopieren und sie nach dem =N' einzufügen. Am Ende steht ein '. Beachten Sie auch das WHERE [Name] = 'WETLANDS.DBO.GRSM_HYDRO_WETLAND_PT', das das Update auf genau diese Feature-Class mit dem angeblich nicht löschbaren Attribut beschränkt.<\/SPAN><\/P><\/P>UPDATE [dbo].[GDB_ITEMS]SET [Definition] =N'<<\/SPAN>DEFeatureClassInfo<\/SPAN> xmlns:<\/SPAN>xsi<\/SPAN>=<\/SPAN>"<\/SPAN>
UPDATE [dbo].[GDB_ITEMS]SET [Definition] =N'<<\/SPAN>DEFeatureClassInfo<\/SPAN> xmlns:<\/SPAN>xsi<\/SPAN>=<\/SPAN>"<\/SPAN>
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>
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registrieren Sie ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.