Есть ли способ превратить этот запрос в обычный встроенный SQL - PullRequest
0 голосов
/ 19 апреля 2010

Я бы хотел превратить этот запрос в обычный встроенный SQL без использования хранимых процедур

declare @nod hierarchyid
select @nod = DepartmentHierarchyNode
from Organisation
where DepartmentHierarchyNode = 0x6BDA

select * 
from Organisation
where @nod.IsDescendantOf(DepartmentHierarchyNode) = 1

Есть ли способ сделать это?

Ответы [ 2 ]

3 голосов
/ 19 апреля 2010

Конечно, нет проблем вообще ...

using(SqlConnection con = new SqlConnection(......))
{
   string stmt = 
      "declare @nod hierarchyid; " + 
      "select @nod = DepartmentHierarchyNode from Organisation where DepartmentHierarchyNode = 0x6BDA; " + 
      "select * from Organisation where @nod.IsDescendantOf(DepartmentHierarchyNode) = 1";

   using(SqlCommand cmd = new SqlCommand(stmt, con))
   {
      con.Open();
      using(SqlDataReader rdr = cmd.ExecuteReader())
      {
         // here, read your values back
      }
      con.Close();
   }
}

Это должно сделать это. На самом деле я не вижу проблем с наличием нескольких операторов в вашем встроенном SQL-запросе.

0 голосов
/ 03 августа 2011

Конечно, вы можете превратить это в один оператор выбора, избегая CTE:

SELECT t1.* 
FROM Organisation t1,
    (SELECT * FROM Organisation 
        WHERE DepartmentHierarchyNode = 0x6BDA) t2
WHERE t1.DepartmentHierarchyNode  = t2 OR
    t2.DepartmentHierarchyNode.IsDescendantOf(t1.DepartmentHierarchyNode) = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...