2013-01-05 2 views
0

일부 코드를 ColdFusion에서 .NET LinqToSQL로 마이그레이션하려고합니다. 다음 쿼리는 현재 ColdFusion에 포함되어 있습니다. LinqToSQL을 얻으려고하기보다는 저장 프로 시저를 작성하려고합니다. 참고 :이 문맥에서 ## in CF는 실제로 SQL에서 #입니다.Embedded SQL을 LinqToSql과 저장 프로 시저로 변환

  • 어떻게 모든 것을 다루 임시 테이블
  • 합니까 LinqToSql 다루는 : 나는 글로벌 임시 테이블

    <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이 적절하지 않은 경우의 예입니까?
  • 성능

답변

1

나는 당신의 SQL 코드의 의도와 동기에 대해 완전히 확실하지 않다 그러나 보인다는 요약 보고서합니다. 이 경우 linq to sql은 이상적인 솔루션이 아닙니다.

저는 linq 2 sql에서 임시 테이블을 만들 수 있다고 생각하지 않습니다. 하위 쿼리를 만들거나 linq 2 개체를 사용하여 이전에 실행 한 쿼리의 결과를 조인 할 수 있습니다.

하지만 내 제안은 linq 2 sql에서도 실행될 수있는보다 간결한 쿼리를 사용하여 데이터를 쿼리하는 더 좋은 방법이 없는지 확인하는 것입니다.

정말 이런 종류의 쿼리가 필요할 경우 저장 프로 시저에 저장하는 것이 좋습니다.

관련 문제