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



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

当我说实体时,我指的是公司中的部门,如您所知,公司之间有部门,部门和其他部门。当用户创建实体时,它应该有父级,即公司或其他实体,并且可能有一个子级是另一个实体,例如 IT>开发>软件...等。

每个人都有 id。我将这些 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)))

一般;

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

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

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

这是stackoverflow帖子。

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

参考

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

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

参考文献 2


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

您需要按空格拆分,因为您的数据EntityHierarchy = 20 10 30 26

尝试在代码中使用以下行:

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

最新更新