我的数据库中有一个名为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)))
答案 0 :(得分:1)
总的来说;
Select items From dbo.Split(YourColumnOrVariable,',')
在您的情况下,(因为您使用的是IN
)WHERE
子句应该是;
WHERE (Employee.FK_EntityId IN (Select Items FROM dbo.Split(EntityHierarchy)))
--Items is the column name of the returning table
答案 1 :(得分:1)
DECLARE @Variable NVARCHAR(MAX)
SELECT @Variable = [Values] FROM tbl_test WHERE ID = @colnumber
SELECT * FROM dbo.ufn_SplitText(@Variable,',')
您可以在存储过程中使用dbo.yourfunction()。
根据OP的评论和数据值更新
由于您在EntityHierarchy = 20 10 30 26
在代码中尝试以下行:
WHERE (Employee.FK_EntityId IN (Select Items FROM dbo.Split(EntityHierarchy, ' ')))