2016-07-01 2 views
0

を返すように関数を作成し、今では私の機能は次のとおりです。私はSQLでテーブルを返す関数を作成していますが、私は関数を作成する方法を正確に知っていないテーブルのSQL

CREATE FUNCTION fn_PegaDetalhesDoPagador ( @IdLoteDet bigint) 
RETURNS TABLE 
(
    NomeSacado varchar(60), 
    CNPJSacado varchar(20), 
    Compromisso varchar(25) 
) 
AS 
RETURN 
(
    SELECT Sacados.NomeSac, 
     LoteDet.IdLoteDet, 
     LoteDet.NossoNum, 
     LoteDet.Comprom, 
     dbo.Sacados.CNPJ 
    FROM dbo.LoteDet INNER JOIN dbo.Sacados ON dbo.LoteDet.IDSac = dbo.Sacados.IDSac 
    WHERE [email protected] 

    IF @@ROWCOUNT = 0 
     BEGIN 
      SELECT Sacados.NomeSac, 
      LoteDetPg.IdLoteDet, 
      LoteDetPg.NossoNum, 
      LoteDetPg.Comprom, 
      dbo.Sacados.CNPJ 
      FROM dbo.LoteDetPg INNER JOIN dbo.Sacados ON dbo.LoteDetPg.IDSac = dbo.Sacados.IDSac 
      WHERE [email protected] 
      RETURN 
     END 
    else 
     RETURN 
) 

私が必要とするのは、selectがテーブルLoteDetから何も返さない場合、テーブルLoteDetPgのselect関数を実行する必要はありません。

このような機能を使用すると可能ですか?

これは他の方法でも可能ですか? LoteDet表や店舗からのデータの

+1

をSSMS(任意のバージョン)を使用してProgrammability \ Functionを展開し、右クリックして "New Multistatement ..."を選択し、提供されたテンプレートを使用します。 –

答えて

1

をフェッチするためにLoteDetPg表を使用します。場合

CREATE FUNCTION fn_PegaDetalhesDoPagador (@IdLoteDet BIGINT) 
RETURNS @res TABLE 
(
    NomeSacado VARCHAR(60) , 
    IdLoteDet VARCHAR(MAX) ,--check this cols data type 
    NossoNum VARCHAR(MAX) ,--check this cols data type 
    Compromisso VARCHAR(25) , 
    CNPJSacado VARCHAR(20) 
) 
AS 
BEGIN 
    IF EXISTS (SELECT TOP 1 Sacados.NomeSac --better if you replace this with PK col 
       FROM dbo.LoteDet 
         INNER JOIN dbo.Sacados ON dbo.LoteDet.IDSac = dbo.Sacados.IDSac 
       WHERE idlotedet = @IdLoteDet) 
     BEGIN 
      INSERT INTO @res 
        SELECT Sacados.NomeSac , 
          LoteDet.IdLoteDet , 
          LoteDet.NossoNum , 
          LoteDet.Comprom , 
          dbo.Sacados.CNPJ 
        FROM dbo.LoteDet 
          INNER JOIN dbo.Sacados ON dbo.LoteDet.IDSac = dbo.Sacados.IDSac 
        WHERE IdLoteDet = @IdLoteDet; 
     END; 
    ELSE 
     BEGIN 
      INSERT INTO @res 
        SELECT Sacados.NomeSac , 
          LoteDetPg.IdLoteDet , 
          LoteDetPg.NossoNum , 
          LoteDetPg.Comprom , 
          dbo.Sacados.CNPJ 
        FROM dbo.LoteDetPg 
          INNER JOIN dbo.Sacados ON dbo.LoteDetPg.IDSac = dbo.Sacados.IDSac 
        WHERE IdLoteDet = @IdLoteDet; 
     END; 

    RETURN; 
END; 
0

ファースト選択回数変数に変数カウントがゼロでない場合、LoteDetからデータをフェッチそうでない場合は、このお試しくださいデータに

関連する問題