1

dbにEntityidを格納する列があり、他の1つはEntitynameを格納します。ユーザーが(列名で)IDを挿入したときに名前を取得するストアドプロシージャが必要です。作業中の列があります。どうすれば改善できますか。plzは説明します。

ALTER   procedure [dbo].[Emp_CompanyHirarchy]
  @FK_CompanyId varchar(50),
  @FK_EntityId varchar(50)
AS
  SELECT * FROM dbo.RetrieveEntityParent
    WHERE (EntityId =@FK_EntityId)

これを実行すると、エラーが発生し続けます:メッセージ216、レベル16、状態1、プロシージャEmp_CompanyHirarchy、行5パラメータが関数'dbo.RetrieveEntityParent'に指定されていません。

関数dbo.RetrieveEntityParent:

ALTER FUNCTION [dbo].[RetrieveEntityParent] (@FK_EntityId int)
 RETURNS TABLE
 AS RETURN

  with p as
 (SELECT     EntityId, FK_ParentId , EntityName ,EntityArabicName 
  FROM         OrgEntity
 WHERE OrgEntity.EntityId=@FK_EntityId 

  UNION ALL      
  SELECT       PA.EntityId, PA.FK_ParentId, PA.EntityName,PA.EntityArabicName 
  FROM         OrgEntity as PA 
  inner join p
  ON p.FK_ParentId = PA.EntityId)


  select * from p 
4

2 に答える 2

1

私はあなたの中でEmployee参照されているのを見つけることができません。 意味ですかEmployee.FK_EntityIdRetrieveEntityParent
OrgEntity.FK_EntityId

編集後、Emp_CompanyHirarchyを機能させるには、@FK_EntityIdをパラメーターとして転送する必要があります。

ALTER   procedure [dbo].[Emp_CompanyHirarchy]
  @FK_CompanyId varchar(50),
  @FK_EntityId varchar(50)
AS
  SELECT * FROM dbo.RetrieveEntityParent(@FK_EntityId)
   -- WHERE mybe some other condition

ところで:varcharとintegerとのいくつかのパラメータタイプの不一致があります

于 2012-12-23T12:02:13.343 に答える
1

このリンクに必要な例がありますが、このリンクでパラメーターを直接使用する簡単な方法があります。

DECLARE @FK_EntityId INT

SET @FK_EntityId = 1

SELECT EntityId, FK_ParentId , EntityName ,EntityArabicName 
FROM OrgEntity
WHERE OrgEntity.EntityId = @FK_EntityId 

UNION ALL

SELECT EntityId, FK_ParentId , EntityName ,EntityArabicName 
FROM OrgEntity
WHERE FK_ParentId = @FK_EntityId
于 2012-12-24T19:46:17.593 に答える