sql >> データベース >  >> RDS >> Sqlserver

関数 (UDF) からテーブル変数を返す方法は?

    DECLARE を使用していません テーブル変数を返すとき。 RETURNS で結果テーブルを定義します

    CREATE Function GetFinancials ()
    RETURNS @financials TABLE
    (
      [a bunch of variable declarations in here]
    )
    AS
    BEGIN
        insert into @Financials
        [big old SELECT query here - this all works fine, and populates @Financials]
    
        RETURN
    END
    

    更新

    ストアド プロシージャで最終結果を返すのはどうですか?

    create procedure uspGetFinanicals
    as
      declare @financial table
      (
        [table definition here]
      )
    
      insert into @financial
      select dbo.GetFinancials()
    
      select * 
        from @Financials f1
        where f1.TransactionDate = (
            select MAX(TransactionDate)
            from @Financials
            where SalesDocumentItemID = f1.SalesDocumentItemID
        )
    

    更新

    これを試して。 UDF 内にテーブル変数を作成して最初の選択の結果を格納し、最終的なクエリの結果を戻り値に挿入します。

    CREATE Function GetFinancials ()
    RETURNS @financials TABLE
    (
      [a bunch of variable declarations in here]
    )
    AS
    BEGIN
        declare @table table([a bunch of variable declarations in here])
        insert into @table
        [big old SELECT query here - this all works fine, and populates @Financials]
    
        insert into @Financials
        select * 
          from @table f1
          where f1.TransactionDate = (
            select MAX(TransactionDate)
            from @table
            where SalesDocumentItemID = f1.SalesDocumentItemID
          )
    
        RETURN
    END
    



    1. 一般的なクエリを列として保存しますか?

    2. SSIS パッケージを実行できません

    3. Entity Framework と SQL Server ビュー

    4. クエリにOR演算子が多すぎる場合、mysqlクエリを最適化する方法は?