Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Има ли практичен начин за използване на типа данни hierarchyID в рамка на обект 4?

Е, изглежда, че получавам мнения, но нямам отговори. Имах някои непосредствени нужди да работя с йерархичната структура над SQL, така че събрах статичен помощен клас. Не смятам това за цялостно решение, но засега работи сравнително добре. PadPath наистина е критичната функция тук.

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) + "/";
    }
}

Надявам се това да помогне на някого! Все пак бих искал да чуя мнението на хората.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преобразувайте „datetime2“ в „datetime“ в SQL Server (T-SQL примери)

  2. DB_NAME() срещу ORIGINAL_DB_NAME() в SQL Server:Каква е разликата?

  3. Намерете всички колони от определен тип във всички таблици в база данни на SQL Server

  4. Избиране на всички дати от таблица в рамките на период от време и включване на 1 ред на празна дата

  5. Вземете дати от номер на седмица в T-SQL