0

次のようなストアド プロシージャがあります。

alter procedure [dbo].[fetchkey]
@locid int =null
as
begin
 select t.TBarcode,t.Status
from Transaction_tbl t 
left join EmployeeMaster_tbl e on t.Ecode=e.Ecode where Locid=5
end

私の出力

TBarcode             Status
-------------------- -----------
57173621345          0
57173865238          1
57181456325          2
57182756600          3
58125323124          4
-----------------------------------

ステータスに基づいてキーロケーションを取得する別のストア プロシージャがあります。

ALTER procedure [dbo].[Keylocation]
@Carid nvarchar(50)
as
begin
SET NOCOUNT ON;
SELECT 
        t.Status,
        k.HBarcode,
        te.UniqueName,
     COALESCE(e.Ename, e1.Ename) AS EName
FROM    Transaction_tbl t
        left JOIN UserMaster_tbl u
            ON u.uid = t.PAICID
             left join EmployeeMaster_tbl e on e.ECode=u.Ecode
            AND t.Status = 0
        LEFT JOIN EmployeeMaster_tbl e1
            ON e1.ECode = t.ECode
            AND t.Status = 1 or e1.Ecode=t.DelEcode and t.Status=4
            left Join KHanger_tbl k
            on t.transactID=k.transactid
            and t.Status in(2,3)
            left JOIN Terminals_tbl te ON k.tid = te.tid

WHERE   t.TBarcode = @Carid
end

私の出力は次のようになります。

Status      HBarcode         UniqueName                EName                         
3           001              Key Room-1                NULL 

これはステータス 3 の結果です。最初のストアド プロシージャでは、この結果に基づいてもう 1 つの列を取得したいと考えています。期待される出力は次のとおりです。

TBarcode             Status    key location
-------------------- -----------
57173621345          0         with Employee(Ename Value)
57173865238          1         with Paic(Ename value)
57181456325          2         UniqueName value( HBarcode value)                       
57182756600          3          UniqueName value ( HBarcode value) 
58125323124          4          with driver(Ename Valu)

これを行う方法はありますか?ストアド プロシージャが初めてです。関数を作成し、この結果をストアド プロシージャに呼び出す方法はありますか?

4

1 に答える 1

0

テーブル値関数を見てください。これは、ある関数の出力を別のストア プロシージャへの入力として提供するために使用できます。これは、それを説明する最も簡単なリンクの 1 つです。ここを参照してくださいテーブル値関数

あなたのケースについては、以下を参照してください。Join をどのように作成すればよいかはわかりませんが、それがどのように記述されているかを見て理解すれば、きっと理解できるはずです。

CREATE FUNCTION FetchKEY(@locid int)    
 RETURNS @keydetails TABLE  (TbarCode int NOT NULL,    Status int NOT NULL )  AS 
  BEGIN   
     INSERT INTO @person (TbarCode,Status)  select t.TBarcode,t.Status from
     Transaction_tbl t  left join EmployeeMaster_tbl e on t.Ecode=e.Ecode
     where Locid=@locid     
  RETURN; 
  END;
Go

したがって、 Store プロシージャは次のようになります

 ALTER procedure [dbo].[Keylocation] @Carid nvarchar(50) as begin 
 SET NOCOUNT ON; 
 SELECT 
          t.Status,k.HBarcode,
          te.UniqueName,
       COALESCE(e.Ename, e1.Ename) AS EName FROM    Transaction_tbl t
          left JOIN UserMaster_tbl u
              ON u.uid = t.PAICID
               left join EmployeeMaster_tbl e on e.ECode=u.Ecode
              AND t.Status = 0
          LEFT JOIN EmployeeMaster_tbl e1
              ON e1.ECode = t.ECode
              AND t.Status = 1 or e1.Ecode=t.DelEcode and t.Status=4
              left Join KHanger_tbl k
              on t.transactID=k.transactid
              and t.Status in(2,3)
              left JOIN Terminals_tbl te ON k.tid = te.tid  
         **Inner Join FetchKEY F on F.TbarCode = k.HBarcode**      
  WHERE   t.TBarcode = @Carid 
end
于 2013-07-24T10:14:16.523 に答える