0

データベースで呼び出されるテーブル値関数があり、splitそれをストアド プロシージャで使用したいと考えています。

私が実体と言うとき、私は会社の部門を意味します。ご存知のように、会社には部門、セクション、およびその他の部門が相互に存在します。ユーザーがエンティティを作成するとき、会社または別のエンティティである親が必要であり、別のエンティティである子が必要です。たとえば、IT>開発>ソフトウェア...などです。

それぞれにIDがあります。これらの ID を 1,2,1 のように 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

これがスタックオーバーフローの投稿です。

  • ストアド プロシージャ内で関数を呼び出す方法のサンプルを次に示します。

参照

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 に答える