0

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

当我说实体时,我的意思是公司中的部门,如您所知,公司之间有部门、部门和其他部门。当用户创建实体时,它应该有一个父实体,它是公司或另一个实体,并且可能有一个子实体,它是另一个实体,例如 IT>Development>software... 等。

每个人都有身份证。我将这些 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)))
4

2 回答 2

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
于 2012-12-18T08:38:08.410 回答
1

这是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, ' ')))

于 2012-12-18T08:39:16.980 回答