Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在存储过程中调用DB函数_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

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

Sql 如何在存储过程中调用DB函数,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我的数据库中有一个名为split的表值函数,我想在存储过程中使用它 当我说实体时,我指的是公司中的部门,正如你们所知,公司之间有部门、部门和其他部门。当用户创建实体时,它应该有一个父实体,即公司或另一个实体,并且可能有一个子实体,即另一个实体,例如it>开发>软件。。。等等 每个都有id。我将这些id存储在一列中,如图1,2,1所示。我需要在向用户显示时拆分它们 以下是我的功能: ALTER FUNCTION [dbo].[Split](@String varchar(50), @Delimi

我的数据库中有一个名为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
一般而言

Select items From dbo.Split(YourColumnOrVariable,',')
在您的情况下,因为您在WHERE子句中使用的是as

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

下面是如何在存储过程中调用函数的示例。 您可以在存储过程中使用dbo.yourfunction

根据OP的意见和数据值进行更新

由于EntityHierarchy=20 10 30 26中的数据需要按空间分割

请在代码中尝试以下行:


从dbo.SplitEntityHierarchy“”中选择项时,Employee.FK_EntityId是一个表还是一个标量值函数?什么是函数定义?您想使用它做什么?它是一个表值函数,用于在同一列中拆分数据。您是否尝试在sp中使用该函数,并了解会发生什么情况?调用它dbo.split col name是否正确???如果我从dbo.split20,10写入select*,结果将是20@Abdulrahman_88你期望的结果是什么?你能告诉我们你的Entityhierarchy的值是什么样子的吗?那么你想得到全部4个值吗?然后执行此操作:其中Employee.FK_EntityId在dbo.SplitEntityHierarchy中的Select Items中表示您按空格进行拆分。col entityhierarchy包括公司的部门id,例如它包括开发、QA等。当用户选择任何子部门时,我希望向用户显示父部门,如:IT>开发>软件,以及存储在中的数量db@Abdulrahman_88让我们一步一步走。您可以将问题更新为1。表架构和示例值2。期望的答案:因此,这里的任何人都可以更清楚地帮助您找到答案。如果我从dbo.split20,10中编写select*from dbo.split20,10,结果将是20@Abdulrahman_88当前位置我想你需要找一个好的。您还应该将字符串作为dbo.split'20,10'传递给split函数
WHERE (Employee.FK_EntityId IN (Select Items FROM dbo.Split(EntityHierarchy)))
--Items is the column name of the returning table
DECLARE @Variable  NVARCHAR(MAX)
SELECT @Variable = [Values] FROM tbl_test WHERE ID = @colnumber
SELECT * FROM dbo.ufn_SplitText(@Variable,',')