Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Czy istnieje praktyczny sposób użycia typu danych hierarchyID w strukturze encji 4?

Cóż, wydaje mi się, że otrzymuję poglądy, ale żadnych odpowiedzi. Miałem kilka natychmiastowych potrzeb do pracy ze strukturą hierarchii powyżej SQL, więc stworzyłem statyczną klasę pomocniczą. Nie uważam tego za kompletne rozwiązanie, ale jak dotąd działa stosunkowo dobrze. PadPath jest tutaj naprawdę kluczową funkcją.

public static class SQLHierarchyManipulatin {
    const int   DEFAULT_PAD_LEN     = 3;
    const char  DEFAULT_PAD_CHAR    = '0';

    public static string PadPath(string Hierarchy) {
        return PadPath (Hierarchy, DEFAULT_PAD_LEN);
    }       
    public static string PadPath(string Hierarchy, int padLen) {
        string[]    components  = Hierarchy.Split('/');

        for (var i = 0; i < components.Length; i++ ) {
            if (components[i] != "") {
                components[i] = components[i].PadLeft(padLen, DEFAULT_PAD_CHAR);
            }
        }
        return string.Join("/", components);
    }

    public static int CurrentNodeIndex(string Hierarchy) {
        string[]    components  = Hierarchy.Split('/');
        string      startItem   = components[components.Length - 2]; //one slot back from trailing slash

        return int.Parse(startItem);
    }

    public static string ParentPath (string Hierarchy) {
        return  Hierarchy.Substring(0, Hierarchy.TrimEnd('/').LastIndexOf('/') + 1);
    }

    public static string AppendChildWithPadding (string Hierarchy, int childIndex, int padLen) {
        return AppendChild(Hierarchy, childIndex, DEFAULT_PAD_LEN);
    }
    public static string AppendChildWithPadding (string Hierarchy, int childIndex) {
        return AppendChild(Hierarchy, childIndex, DEFAULT_PAD_LEN);
    }
    public static string AppendChild (string Hierarchy, int childIndex) {
        return AppendChild(Hierarchy, childIndex, DEFAULT_PAD_LEN);
    }
    public static string AppendChild (string Hierarchy, int childIndex, int padLen) {
        return Hierarchy + childIndex.ToString().PadLeft(padLen, DEFAULT_PAD_CHAR) + "/";
    }
}

Mam nadzieję, że to komuś pomoże! Chociaż nadal chciałbym usłyszeć od ludzi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Relacja klucza podstawowego i indeksu klastrowego

  2. Napraw uszkodzoną bazę danych SQL podczas problemu z uaktualnieniem

  3. wyspy i luki tsql

  4. SQL Server i C#:pobierz ostatnio wstawiony identyfikator

  5. Czy można zmienić typ danych kolumny w widoku?