我的数据库中有一个名为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,',')
在您的情况下,(因为您使用的是IN
)WHERE
子句应该是 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, ' ')))