0

一部のコードを ColdFusion から .NET LinqToSQL に移行しています。次のクエリは、現在 ColdFusion に埋め込まれています。LinqToSQL をこれにしようとするのではなく、ストアド プロシージャを作成することを検討しています。注: このコンテキストでの CF の ## は、実際には SQL の # です。グローバル一時テーブルを作成していません

<cfquery name="qryTrafficDetails">
    DECLARE @startDate date
    DECLARE @endDate date
    SET     @startDate = <cfqueryparam cfsqltype="CF_SQL_date" value="#filter.StartDate#">
    SET     @endDate = <cfqueryparam cfsqltype="CF_SQL_date" value="#filter.endDate#">


    SELECT  CONVERT(date, CreateDate) AS CreateDate, url_vars.value('(search)[1]', 'nvarchar(max)') AS Item, remote_addr
    INTO    ##tempTraffic
    FROM    dbo.Traffic WITH (NOLOCK)

    WHERE   Createdate BETWEEN @startDate AND @endDate
    AND     url_vars.exist('.[search]') = 1     


    SELECT Area, AreaSort, Item, CalendarDate, isNull(Visitor, 0) AS Visitor, ISNULL(Hit,0) AS Hit
    FROM    dbo.Calendar LEFT JOIN 
        (



        SELECT AreaSort = 10, 'Search' AS Area, FullGrid.Item AS Item, FullGrid.CalendarDate AS CreateDate,

                COUNT(DISTINCT remote_addr) AS visitor, 
                COUNT(remote_addr) as hit

        FROM  (
            SELECT DISTINCT CalendarDate, Item
            FROM dbo.Calendar, ##TempTraffic
            WHERE   CalendarDate  BETWEEN @startDate AND @endDate
            ) FullGrid 

        LEFT JOIN ##TempTraffic AS DataItem
            ON FullGrid.CalendarDate = CreateDate
            AND FullGrid.Item = DataItem.Item       

        GROUP BY FullGrid.Item, FullGrid.CalendarDate



        ) AS SummaryDetail

    ON  CalendarDate = SummaryDetail.CreateDate

    WHERE   CalendarDate  BETWEEN @startDate AND @endDate
    AND AreaSort IS NOT NULL    

    ORDER BY AreaSort, Item, CalendarDate
    </cfquery>

    <cfreturn qryTrafficDetails>

私が懸念している問題のいくつかは次のとおりです。

  • 一時テーブルの扱い方
  • LinqToSql はすべてをカバーしていますか?
  • これは LinqToSql が適切でない例ですか?
  • パフォーマンス
4

1 に答える 1