Subject: Visual Studio 2003 Not Responding
Posted By: pcliu Post Date: 8/30/2006 3:12:08 AM
im developing a report in SQL Reporting Services 2000 using VS 2003.
i tested my query in SQL Query Analyzer and i can get the result within 2-3 seconds. But when i run the query in VS 2003, the VS 2003 becomes Not Responding.

below is the query and i set my query into 3 variable, @MYSQL, @MYSQL2 and @MYSQL3. and i found out that only @MYSQL will cause the VS 2003 Not Responding. Please help me to check what is my problem, if my query has error, why i can get the result so fast in SQL Query Analyzer.

Query:

DECLARE @SQL char(1000)
DECLARE @FCWeekNo int
DECLARE @LCWeekNo int

DECLARE @i int

DECLARE @STARTDATE char(10)
DECLARE @ENDDATE char(10)
DECLARE @WEEKNO INT
DECLARE @WEEKMONTH INT
DECLARE @STARTDATEMONTH char(10)
DECLARE @DAYNO INT
DECLARE @COUNTER INT
DECLARE @LSELECTEDDAY CHAR(10)
DECLARE @LSTARTDATE CHAR(10)
DECLARE @LENDDATE CHAR(10)
 DECLARE @LWEEKNO INT
DECLARE @LWEEKMONTH INT
DECLARE @LSTARTDATEMONTH char(10)
DECLARE @Year char(4)
DECLARE @LYear char(4)

DECLARE @SELECTEDDAY CHAR(10)
DECLARE @STARTWEEK int
DECLARE @LSTARTWEEK int

set @SELECTEDDAY = '07.01.2006'
SET              DATEFORMAT DMY;
                          SELECT     @STARTDATE = CONVERT(CHAR(10), DATE_BEG, 104), @ENDDATE = CONVERT(CHAR(10), DATE_END, 104), @WEEKNO = WEEK,
                                                  @WEEKMONTH = WEEK_MONTH, @Year= WEEK_YEAR
                           FROM         WEEK_CY
                           WHERE     DATE_BEG <= @SELECTEDDAY AND DATE_END >= @SELECTEDDAY
                                                      SELECT     TOP 1 @STARTDATEMONTH = CONVERT(CHAR(10), DATE_BEG, 104), @STARTWEEK =WEEK
                                                       FROM         Week_CY
                                                       WHERE     (WEEK_MONTH = @WEEKMONTH) AND (WEEK_YEAR = YEAR(@SELECTEDDAY))
                                                       ORDER BY WEEK
SET              DATEFORMAT DMY;
                          SELECT     @DAYNO = DATEDIFF(d, CONVERT(CHAR(10), DATE_BEG, 104), @SELECTEDDAY)
                           FROM         WEEK_CY
                           WHERE     DATE_BEG <= @SELECTEDDAY AND DATE_END >= @SELECTEDDAY
SET              DATEFORMAT DMY;
                          SELECT     @COUNTER = SAL_COUNTER
                           FROM         WEEK_REF
                           WHERE     SAL_YEAR = YEAR(@SELECTEDDAY)
SET              @LWEEKNO = @WEEKNO + @COUNTER
SET              DATEFORMAT DMY;
                          SELECT     @LSTARTDATE = CONVERT(CHAR(10), DATE_BEG, 104), @LENDDATE = CONVERT(CHAR(10), DATE_END, 104),
                                                  @LWEEKMONTH = WEEK_MONTH, @LYear = WEEK_YEAR
                           FROM         WEEK_CY
                           WHERE     WEEK = @LWEEKNO AND WEEK_YEAR = YEAR(@SELECTEDDAY) - 1
                                                      SELECT     TOP 1 @LSTARTDATEMONTH = CONVERT(CHAR(10), DATE_BEG, 104), @LSTARTWEEK =WEEK
                                                       FROM         Week_CY
                                                       WHERE     (WEEK_MONTH = @LWEEKMONTH) AND (WEEK_YEAR = YEAR(@SELECTEDDAY) - 1)
                                                       ORDER BY WEEK

SET              DATEFORMAT DMY;
                          SELECT     @LSELECTEDDAY = CONVERT(char(10), DATEADD(d, @DAYNO, CONVERT(CHAR(10), DATE_BEG, 104)), 104)
                           FROM         WEEK_CY
                           WHERE     DATE_BEG = @LSTARTDATE AND DATE_END = @LENDDATE

set @FCWeekNo = @STARTWEEK
set @LCWeekNo = @WEEKNO
DECLARE @mycounter int

DECLARE @tempName char(8)

DECLARE @tblName varchar(1000)
DECLARE @tblName2 varchar(1000)

set @tblName = ''
set @mycounter= @FCWeekNo
while @mycounter>= @FCWeekNo and @mycounter <=@LCWeekNo
    begin

IF @mycounter < 10
SET              @tempName = '0' + cast(@mycounter as char(1)) + @Year ELSE
SET              @tempName = cast(@mycounter as char(2)) +  @Year
SET              @tempName = 'SA' + @tempName

set @tblName ='select  div, prdt_dept, sum(net_sale) AS CNetSales, 0 AS LNetSales, sum(newprofit) AS CNewProfit,  0 AS LNewProfit, sale_dte from ' + @tempName + ' WHERE DIV= ''A''  AND SALE_DTE <=''' + @SELECTEDDAY + ''' group by div, prdt_dept, sale_dte UNION ALL ' +  @tblName


set @mycounter = @mycounter + 1

    end
set @tblName = rtrim(@tblName)
set @tblName = left(@tblName,len(@tblName)-10)

set @FCWeekNo = @LSTARTWEEK
set @LCWeekNo = @LWEEKNO
set @mycounter= @FCWeekNo
set @tempName = ''
set @tblName2 = ''
while @mycounter>= @FCWeekNo and @mycounter <=@LCWeekNo
    begin

IF @mycounter < 10
SET              @tempName = '0' + cast(@mycounter as char(1)) + @LYear ELSE
SET              @tempName = cast(@mycounter as char(2)) +  @LYear
SET              @tempName = 'SA' + @tempName

set @tblName2 ='select  div, prdt_dept,  0 AS CNetSales, sum(net_sale) AS LNetSales, 0 AS CNewProfit, sum(newprofit) AS LNewProfit, sale_dte from ' + @tempName + ' WHERE DIV= ''A''  AND  SALE_DTE <=''' + @LSELECTEDDAY + ''' group by div, prdt_dept, sale_dte UNION ALL ' + @tblName2


set @mycounter = @mycounter + 1

    end
set @tblName2 = rtrim(@tblName2)
set @tblName2 = left(@tblName2,len(@tblName2)-10)

DECLARE @tempUnionTableSQL varchar(4000)
set @tempUnionTableSQL =@tblName + ' UNION ALL ' +  @tblName2 + ' order by div, prdt_dept'


DECLARE @MYSQL3 varchar(700)
set @MYSQL3 = 'DECLARE @tempUnionTable table(div char(1), prdt_dept char(2), CNetSales money, LNetSales money, CNewProfit money, LNewProfit money, saledate datetime)
set dateformat dmy; insert into @tempUnionTable ' + @tempUnionTableSQL


DECLARE @MYSQL varchar(3000)



set @MYSQL ='DECLARE @temp TABLE(DivCode char(1), DivName char(40), DeptNo int, DeptName char(40), CDNetSales money,
LDNetSales money, CWNetSales money, LWNetSale money, CMNetSales money, LMNetSales money, CDNewProfit money,
LDNewProfit money, CWNewProfit money, LWNewProfit money, CMNewProfit money, LMNewProfit money)
set dateformat dmy; INSERT INTO @temp SELECT    
DivCode, DivName, DeptNo, DeptName,
SUM(CDNetSales) AS CDNetSales, SUM(LDNetSales)AS LDNetSales,
SUM(CWNetSales) AS CWNetSales, SUM(LWNetSales) AS LWNetSales,
SUM(CMNetSales) AS CMNetSales, SUM(LMNetSales) AS LMNetSales,

SUM(CDNewProfit) AS CDNewProfit, SUM(LDNewProfit) AS LDNewProfit,
SUM(CWNewProfit) AS CWNewProfit, SUM(LWNewProfit) AS LWNewProfit,
SUM(CMNewProfit) AS CMNewProfit, SUM(LMNewProfit) AS LMNewProfit

FROM         
(SELECT       DIVMASTR.DIVISION AS DivCode, DIVMASTR.DIV_DESC AS DivName, DPTMASTR.DEPT AS DeptNo,
DPTMASTR.DPT_DESC AS DeptName,
''CDNetSales'' = CASE when A.SALE_DTE =''' +  @SELECTEDDAY + ''' then A.NET_SALE ELSE 0 END, 0 AS LDNetSales,
''CWNetSales'' = CASE when A.SALE_DTE <=''' +  @SELECTEDDAY + ''' then A.NET_SALE ELSE 0 END, 0 AS LWNetSales,
0 as CMNetSales, 0 as LMNetSales,

''CDNewProfit'' = CASE when A.SALE_DTE =''' + @SELECTEDDAY + ''' then A.NEWPROFIT ELSE 0 END, 0 AS LDNewProfit,
''CWNewProfit'' = CASE when A.SALE_DTE <=''' + @SELECTEDDAY + ''' then A.NEWPROFIT ELSE 0 END, 0 AS LWNewProfit,
0 as CMNewPRofit, 0 as LMNewPRofit

FROM          STRMASTR INNER JOIN
                     SA012006 AS A ON STRMASTR.STR_NBR = A.STR_NBR INNER JOIN
DIVMASTR ON DIVMASTR.DIVISION = A.DIV INNER JOIN
                     DPTMASTR ON DIVMASTR.DIVISION = DPTMASTR.DIVISION and A.DIV = DIVMASTR.DIVISION AND
                     A.PRDT_DEPT = DPTMASTR.DEPT
WHERE     (A.DIV = ''A'') AND (A.NET_SALE > 0)

UNION ALL
SELECT      DIVMASTR.DIVISION AS DivCode, DIVMASTR.DIV_DESC AS DivName, DPTMASTR.DEPT AS DeptNo,
DPTMASTR.DPT_DESC AS DeptName , 0 AS CDNetSales, ''LDNetSales'' = CASE when B.SALE_DTE =''' + @LSELECTEDDAY + ''' then B.NET_SALE ELSE 0 END,
0 As CWNetSales, ''LWNetSales'' = CASE when B.SALE_DTE <=''' + @LSELECTEDDAY + ''' then B.NET_SALE ELSE 0 END,
0 as CMNetSales, 0 as LMNetSales,

0 AS CDNewProfit, ''LDNewProfit'' = CASE when B.SALE_DTE =''' + @LSELECTEDDAY + ''' then B.NEWPROFIT ELSE 0 END,
0 AS CWNewProfit, ''LWNewProfit'' = CASE when B.SALE_DTE <=''' + @LSELECTEDDAY + ''' then B.NEWPROFIT ELSE 0 END,
0 as CMNewPRofit, 0 as LMNewPRofit

FROM          STRMASTR INNER JOIN
                     SA022005 AS B ON STRMASTR.STR_NBR = B.STR_NBR INNER JOIN
DIVMASTR ON DIVMASTR.DIVISION = B.DIV INNER JOIN
                     DPTMASTR ON DIVMASTR.DIVISION = DPTMASTR.DIVISION and B.DIV = DIVMASTR.DIVISION AND
                     B.PRDT_DEPT = DPTMASTR.DEPT
WHERE     (B.DIV = ''A'') AND (B.NET_SALE > 0)

) AS XXX


GROUP BY DivCode, DivName, DeptNo, DeptName order by DeptNo'



DECLARE @MYSQL2 varchar (1400)


set @MYSQL2 = '
DECLARE @tempCNetSales money
DECLARE @tempLNetSales money

DECLARE @tempCNewPorfit money
DECLARE @tempLNewProfit money

DECLARE @s varchar(50) DECLARE fil SCROLL CURSOR FOR
SELECT DeptNo  FROM @temp
OPEN fil
                                                                            
FETCH NEXT FROM fil INTO @s
-- Need to do FETCH before the loop - because value of @@fetch_status can be still set from previous time
WHILE @@fetch_status = 0 BEGIN

set @tempCNetSales = 0
set @tempLNetSales = 0
set @tempCNewPorfit = 0
set @tempLNewProfit = 0

set @tempCNetSales = (select sum(CNetSales) from @tempUnionTable where saledate <= ''' + @SELECTEDDAY + ''' AND prdt_dept = @s)
set @tempLNetSales = (select sum(LNetSales) from @tempUnionTable where saledate <= ''' + @LSELECTEDDAY + ''' AND prdt_dept = @s)
set @tempCNewPorfit = (select sum(CNewProfit) from @tempUnionTable where saledate <= ''' + @SELECTEDDAY + ''' AND prdt_dept = @s)
set @tempLNewProfit = (select sum(LNewProfit) from @tempUnionTable where saledate <= ''' + @LSELECTEDDAY + ''' AND prdt_dept = @s)

       set dateformat dmy; update @temp set CMNetSales = @tempCNetSales ,
       CMNewProfit =  @tempCNewPorfit,
       LMNetSales =  @tempLNetSales,
       LMNewProfit =  @tempLNewProfit
       where DeptNo = @s

     

FETCH NEXT FROM fil INTO @s


END
                                                                                
CLOSE fil
DEALLOCATE fil
select * from @temp
'

exec (@MYSQL3 + ' ' + @MYSQL + ' ' + @MYSQL2)



Go to topic 49050

Return to index page 190
Return to index page 189
Return to index page 188
Return to index page 187
Return to index page 186
Return to index page 185
Return to index page 184
Return to index page 183
Return to index page 182
Return to index page 181