1

ストアド プロシージャにクエリがありますが、正常に動作します。今、エラーを表示する列を追加したいと思います。

私のストアドプロシージャコードは次のとおりです。

ALTER PROCEDURE dbo.test
      @SDate DATETIME =Null
    , @EDate DATETIME=Null
    ,@period int=Null        
AS BEGIN         
    SET NOCOUNT ON;

    if @period = 1 
    Begin 
       SELECT 
              t.TotalQuote
            , t.QuoteAmount        
            ,t.avgProbQ
            , t2.TotalOrders
            , t2.OrderAmount       
             ,t3.totalSales
            ,t3.Prob
        FROM (SELECT a = 1) a
        CROSS JOIN (
            SELECT 
                  TotalQuote = COUNT(quoteid)
                , QuoteAmount = SUM(totalamount)
                ,avgProbQ=SUM(CloseProbability)/COUNT(CloseProbability)
            FROM dbo.QuoteBase join dbo.OpportunityBase on dbo.QuoteBase.opportunityid=dbo.OpportunityBase.opportunityid   
            WHERE
              Month(dbo.QuoteBase.CreatedOn)=Month(getdate()) And YEAR(dbo.QuoteBase.CreatedOn)=YEAR(GETDATE())
        ) t
        CROSS JOIN (
            SELECT 
                  TotalOrders = COUNT(salesorderid)
                , OrderAmount = SUM(totalamount) 
            FROM dbo.SalesOrderBase join dbo.OpportunityBase on dbo.SalesOrderBase.Opportunityid=dbo.OpportunityBase.Opportunityid 
         Where Month(dbo.SalesOrderBase.CreatedOn)=Month(getdate()) And YEAR(dbo.SalesOrderBase.CreatedOn)=YEAR(GETDATE())
        ) t2
        CROSS Join(
        SELECT
        TotalSales=COUNT(dbo.OpportunityBase.opportunityid)
        ,Prob=SUM(CloseProbability)/COUNT(CloseProbability)

        FROM dbo.OpportunityBase join dbo.SalesorderBase on dbo.SalesOrderBase.Opportunityid=dbo.OpportunityBase.Opportunityid
            WHERE Month(dbo.OpportunityBase.CreatedOn)=Month(getdate()) And YEAR(dbo.OpportunityBase.CreatedOn)=YEAR(GETDATE())
            And dbo.SalesorderBase.StateCode=4
            )t3
    END

正常に動作しますが、のような新しい列を追加すると、t.testエラーが表示されます

メッセージ 207、レベル 16、状態 1、手順テスト、行 23
列名 'test' が無効です。

誰かがアイデアを持っている場合は、私と共有してください

4

3 に答える 3

1

ストアド プロシージャにテストを追加しているようですが、データベース テーブルには追加されていないようです。

これは、エラー メッセージを見て言えることです。それが役に立てば幸い

于 2013-06-04T13:52:17.130 に答える
0

testこのクエリに列が存在しないため、このエラーが発生しています。

CROSS JOIN (
    SELECT 
          TotalQuote = COUNT(quoteid)
        , QuoteAmount = SUM(totalamount)
        ,avgProbQ=SUM(CloseProbability)/COUNT(CloseProbability)
    FROM dbo.QuoteBase join dbo.OpportunityBase on dbo.QuoteBase.opportunityid=dbo.OpportunityBase.opportunityid   

    WHERE
      Month(dbo.QuoteBase.CreatedOn)=Month(getdate()) And YEAR(dbo.QuoteBase.CreatedOn)=YEAR(GETDATE())
) t

ただし、そのクエリに名前付きの列を追加すると、test成功します。必要に応じて文字列リテラルにすることもできます'Some literal value' AS test

于 2013-06-04T13:49:49.490 に答える
0

何をしようとしているのかはわかりませんが、ストアドプロシージャの出力に列を追加しようとしている場合、それはストアドプロシージャがデータを読み取っているテーブルにない場合は、リテラル式を配置する必要があります以下のように列名を定義して select 句に挿入します。この例では文字列リテラルを使用していますが、任意のデータ型にすることができます...

 SELECT 'A String literal to be added to output' As  NewColumnName,
      t.TotalQuote
    , t.QuoteAmount        
    ,t.avgProbQ
    , t2.TotalOrders
    , t2.OrderAmount       
     ,t3.totalSales
    ,t3.Prob
  etc.... 
于 2013-06-04T13:48:49.080 に答える