日期:2014-05-16  浏览次数:20813 次

.NET CLR 存储过程问题,请指导。
<Microsoft.SqlServer.Server.SqlProcedure()> _
    Public Shared Sub S_工作管理_任务数量(ByVal str_输入参数 As String)
        Dim cn As New SqlConnection("context connection=true")
        Dim cmd As New SqlCommand()
        cmd = cn.CreateCommand
       cmd.CommandText = "declare @机构码 int " &
       "declare @机构名 nvarchar(10) " &
       ";with t as ( " &
       "select 机构名称,机构代码,级数,上级代码 from 系统数据_机构信息 where 机构代码=" & str_输入参数分解(1) &
       " union all " &
       "select a.机构名称,a.机构代码,a.级数,a.上级代码 from 系统数据_机构信息 a " &
       "join t on t.上级代码=a.机构代码 ) " &
       "select distinct @机构码=机构代码,@机构名=机构名称 from t where 级数=2 "
        cn.Open()
        SqlContext.Pipe.ExecuteAndSend(cmd)
        cn.Close()
    End Sub     

以上是我的一个存储过程的代码,就是提供一个输入参数,返回这个参数相应的上级部门。
现在的问题就是,如果上面的代码我做成一个clr的存储过程,那我如何在另一个clr存储过程中调用他,
并返回相应的[机构代码]、[机构名称]两个值?
------解决方案--------------------

  ;with t as (
          select 机构名称,机构代码,级数,上级代码 from 系统数据_机构信息 where 机构代码=2
          union all 
          select a.机构名称,a.机构代码,a.级数,a.上级代码 from 系统数据_机构信息 a 
          join t on t.机构代码 =a.上级代码) 
       ---- select 机构代码 from t
   select * from 系统数据_机构信息 where 机构代码 in
   (select 机构代码 from t)
   

直接放到子查询里不就可以啦