2011-04-13 67 views
0

我有一個查詢。錯誤雖然通過長查詢

DECLARE @fromDate AS DATETIME = '01/28/2009'; 
DECLARE @ToDate AS DATETIME = '01/28/2011'; 
DECLARE @IsMonthWise AS BIT = 1 
DECLARE @temp AS TABLE( userId BIGINT 
         , Visits INT 
         , DownLoads INT) 
DECLARE @tempmonth AS TABLE( userId BIGINT 
           , Visits INT 
           , DownLoads INT 
           , MonthYear NVARCHAR(50)) 

IF @IsMonthWise = 0 
BEGIN 
    INSERT INTO @temp( UserId 
         , Visits 
         , DownLoads) 
    SELECT Main.user_id    AS UserId 
      , COUNT(Main.user_id) AS Visits 
      , (SELECT COUNT(user_id) 
       FROM content_hits_tbl AS Sub 
       WHERE content_id <> 0 AND 
        Main.user_id = Sub.user_id AND 
        visit_type = 2 AND 
        CAST(CONVERT(VARCHAR, hit_date, 101) AS DATETIME) BETWEEN CAST(CONVERT(VARCHAR, @fromDate, 101) AS DATETIME) AND CAST(CONVERT(VARCHAR, @ToDate, 101) AS DATETIME) 
       GROUP BY USER_ID) 
    FROM content_hits_tbl AS Main 
    INNER JOIN users 
    ON Main.user_id = users.user_id 
    WHERE content_id = 0 AND 
      visit_type = 1 AND 
      users.user_deleted = 0 AND 
      CAST(CONVERT(VARCHAR, hit_date, 101) AS DATETIME) BETWEEN CAST(CONVERT(VARCHAR, @fromDate, 101) AS DATETIME) AND CAST(CONVERT(VARCHAR, @ToDate, 101) AS DATETIME) 
    GROUP BY Main.user_id 

    SELECT Users.last_name + ',' + Users.first_name AS User_Name 
      , REPLACE(REPLACE(REPLACE(REPLACE(region.value_string, '1', 'APR'), '2', 'LAR'), '3', 'EAMER'), '4', 'US&C') AS User_Region 
      , CASE 
       WHEN Users.membership_user = 0 THEN 'Internal' 
       ELSE 'External' 
      END AS User_Type 
      , Visits     AS No_of_Visits 
      , ISNULL(DownLoads, 0) AS No_of_DownLoads 
      , Users.user_id   AS UserId 
      , (SELECT userData.value_string 
       FROM dynamic_data_tbl AS userData 
       WHERE userData.object_id = user_id AND 
        definition_id = 2147483649) AS [Organizational Group] 
    FROM users AS Users 
    INNER JOIN @temp AS temp 
    ON temp.UserId = Users.user_id 
    INNER JOIN dynamic_data_tbl AS region 
    ON region.object_id = Users.user_id 
    WHERE region.definition_id = 43 
    ORDER BY No_of_Visits DESC 
END 
ELSE 
BEGIN 
    INSERT INTO @tempmonth( UserId 
          , Visits 
          , DownLoads 
          , MonthYear) 
    SELECT Main.user_id    AS UserId 
      , COUNT(Main.user_id) AS Visits 
      , (SELECT COUNT(user_id) 
       FROM content_hits_tbl AS Sub 
       WHERE content_id <> 0 AND 
        Main.user_id = Sub.user_id AND 
        DATENAME(mm, Main.hit_date) + '-' + DATENAME(yyyy, Main.hit_date) = DATENAME(mm, Sub.hit_date) + '-' + DATENAME(yyyy, Sub.hit_date) AND 
        visit_type = 2 AND 
        CAST(CONVERT(VARCHAR, hit_date, 101) AS DATETIME) BETWEEN CAST(CONVERT(VARCHAR, @fromDate, 101) AS DATETIME) AND CAST(CONVERT(VARCHAR, @ToDate, 101) AS DATETIME) 
       GROUP BY USER_ID 
         , DATENAME(mm, hit_date) + '-' + DATENAME(yyyy, hit_date)) 
      , DATENAME(mm, hit_date) + '-' + DATENAME(yyyy, hit_date) AS MonthYear 
    FROM content_hits_tbl AS Main 
    INNER JOIN users 
    ON Main.user_id = users.user_id 
    WHERE content_id = 0 AND 
      visit_type = 1 AND 
      users.user_deleted = 0 AND 
      CAST(CONVERT(VARCHAR, hit_date, 101) AS DATETIME) BETWEEN CAST(CONVERT(VARCHAR, @fromDate, 101) AS DATETIME) AND CAST(CONVERT(VARCHAR, @ToDate, 101) AS DATETIME) 
    GROUP BY Main.user_id 
      , DATENAME(mm, hit_date) + '-' + DATENAME(yyyy, hit_date) 

    SELECT Users.last_name + ',' + Users.first_name AS User_Name 
      , REPLACE(REPLACE(REPLACE(REPLACE(region.value_string, '1', 'APR'), '2', 'LAR'), '3', 'EAMER'), '4', 'US&C') AS User_Region 
      , CASE 
       WHEN Users.membership_user = 0 THEN 'Internal' 
       ELSE 'External' 
      END AS User_Type 
      , Visits     AS No_of_Visits 
      , ISNULL(DownLoads, 0) AS No_of_DownLoads 
      , Users.user_id   AS UserId 
      , temp.MonthYear   AS MonthYear 
      , (SELECT userData.value_string 
       FROM dynamic_data_tbl AS userData 
       WHERE userData.object_id = user_id AND 
        definition_id = 2147483649) AS [Organizational Group] 
    FROM users AS Users 
    INNER JOIN @tempmonth AS temp 
    ON temp.UserId = Users.user_id 
    INNER JOIN dynamic_data_tbl AS region 
    ON region.object_id = Users.user_id 
    WHERE region.definition_id = 43 
    ORDER BY User_Name ASC 
      , MonthYear DESC 
END 

DELETE FROM @temp 

DELETE FROM @tempmonth 

IT如果在SQL服務器中運行,可以正常工作。但是,如果我通過相同的字符串從C#代碼(ExecuteReader)。它不執行。

如果我從後面的代碼中複製查詢並粘貼到SQL Server中,它將進入單行。我認爲這是我的查詢未執行的原因。

請讓我知道怎樣的方式來傳遞從我的應用程序執行長查詢(C#)

感謝

+1

你應該格式化你的問題/ sql - 它在任何時候都不可讀! – 2011-04-13 11:30:15

+0

你會得到哪個錯誤/異常? – 2011-04-13 11:31:48

+0

@Andreas,我得到'<'附近錯誤的語法。 「<」附近的語法不正確。 ''附近語法不正確。 「<」附近的語法不正確。 必須聲明標量變量「@IsMonthWise」。 必須聲明表變量「@temp」。 ''附近語法不正確。 ''附近語法不正確。 ''附近語法不正確。 必須聲明表變量「@tempmonth」。 ''附近語法不正確。 ''附近語法不正確。 ''附近語法不正確。 – 2011-04-13 11:39:17

回答

0

首先嚐試聲明的變量:

DECLARE @fromDate AS DATETIME; 
DECLARE @ToDate AS DATETIME; 

等等

然後設置它們

SET @fromDate = '01/28/2009'; 
SET @ToDate = '01/28/2011'; 

不確定這是否會解決您的問題,或者不會看到設置您的SqlCommand對象並執行此查詢的代碼難以分辨,但這是將值分配給變量的首選方法。