如何在存储过程中调用DB函数

时间:2012-12-18 08:25:19

标签: sql sql-server sql-server-2008

我的数据库中有一个名为split的表值函数,我想在存储过程中使用它。

当我说实体我指的是公司的部门时,你知道公司有部门,部门和其他部门。当用户创建实体时,它应该具有父公司或公司或其他实体,并且可能有一个孩子,这是另一个实体,例如IT>开发>软件......等。

每个人都有身份证明。我将这些ID存储在一列中,如1,2,1。我向用户展示时需要拆分它们。

这是我的功能:

 ALTER FUNCTION [dbo].[Split](@String varchar(50), @Delimiter char(1))       
 returns @temptable TABLE (items varchar(50))       
 as       
 begin       
  declare @idx int       
  declare @slice varchar(50)       

 select @idx = 1       
    if len(@String)<1 or @String is null  return       

 while @idx!= 0       
 begin       
    set @idx = charindex(@Delimiter,@String)       
    if @idx!=0       
        set @slice = left(@String,@idx - 1)       
    else       
        set @slice = @String       

  if(len(@slice)>0)  
        insert into @temptable(Items) values(@slice)       

   set @String = right(@String,len(@String) - @idx)       
    if len(@String) = 0 break       
   end   
  return       
 end

这是我的存储过程:

alter   procedure [dbo].[Emp_CompanyHirarchy]
@FK_CompanyId varchar(50),
@FK_EntityId varchar(50)
AS
  SELECT     
     Employee.EmployeeId, Employee.EmployeeNo,   
     Employee.EmployeeName, Employee.EmployeeArabicName, 
     OrgEntity.EntityName, OrgCompany.CompanyName, 
     Employee.DOB, Employee.Email
  FROM         
     Employee 
  INNER JOIN
     OrgEntity ON Employee.FK_EntityId = OrgEntity.EntityId 
  INNER JOIN
     OrgCompany ON OrgEntity.FK_CompanyId = OrgCompany.CompanyId
  WHERE     
     (Employee.FK_EntityId IN (dbo.Split(EntityHierarchy)))

2 个答案:

答案 0 :(得分:1)

总的来说;

Select items From dbo.Split(YourColumnOrVariable,',')

在您的情况下,(因为您使用的是INWHERE子句应该是;

WHERE (Employee.FK_EntityId IN (Select Items FROM dbo.Split(EntityHierarchy)))
--Items is the column name of the returning table

答案 1 :(得分:1)

这是stackoverflow post

  • 以下是如何在存储过程中调用函数的示例。

REference

DECLARE @Variable  NVARCHAR(MAX)
SELECT @Variable = [Values] FROM tbl_test WHERE ID = @colnumber
SELECT * FROM dbo.ufn_SplitText(@Variable,',')

您可以在存储过程中使用dbo.yourfunction()。

Reference 2


根据OP的评论和数据值更新

由于您在EntityHierarchy = 20 10 30 26

中的数据,因此需要按空格进行拆分

在代码中尝试以下行:

WHERE (Employee.FK_EntityId IN (Select Items FROM dbo.Split(EntityHierarchy, ' ')))