DECLARE 
@STARTDATE nvarchar(50),
@ENDDATE nvarchar(50)
SELECT 
@STARTDATE ='20070701',
@ENDDATE ='20070728'
--*/
DECLARE @WSQLDATE NVARCHAR(4000)
DECLARE @WSQLDATE1 NVARCHAR(4000)
DECLARE @CUR_SQL NVARCHAR(4000)
DECLARE @CUR_SQL1 NVARCHAR(4000)
DECLARE @ASQL NVARCHAR(4000)
DECLARE @SQL NVARCHAR(4000)
DECLARE @SQL1 NVARCHAR(4000)
DECLARE @SQL2 NVARCHAR(4000)
DECLARE @WSQL NVARCHAR(4000)
DECLARE @WSQL1 NVARCHAR(4000)
DECLARE @CUR_SQL_item NVARCHAR(4000)
DECLARE @CUR_SQL_stat NVARCHAR(4000)
DECLARE @SQL_STAT NVARCHAR(4000)
DECLARE @SQL_END NVARCHAR(4000)
DECLARE @YYMMDD NVARCHAR(50)
DECLARE @YYMMDD1 NVARCHAR(50)
DECLARE @sSumitem int
DECLARE @sSumstat int
DECLARE @sSum int
SET @SQL_STAT=''
SET @SQL_END=''
set @SQL2=''
set @WSQLDATE1 =''
SET @WSQLDATE =''
SET @CUR_SQL_stat=''
SET @SQL1=''
SET @CUR_SQL1=''
SET @CUR_SQL_item=''
SET @SQL=''
SET @CUR_SQL =''
SET @ASQL =' '
SET @WSQL=''
SET @WSQL1=''
IF @STARTDATE <> ''
SET @WSQLDATE = @WSQLDATE + ' AND Convert(char(8),pubdate,112)>=''' + @STARTDATE + ''' '
SET @WSQLDATE1 = @WSQLDATE1 + ' AND Convert(char(8),ClickDate,112)>=''' + @STARTDATE + ''' '
IF @ENDDATE <> ''
SET @WSQLDATE = @WSQLDATE + ' AND Convert(char(8),pubdate,112)<=''' + @ENDDATE + ''' '
SET @WSQLDATE1 = @WSQLDATE1 + ' AND Convert(char(8),ClickDate,112)<=''' + @ENDDATE + ''' '
SELECT @sSumitem = SUM(CASE WHEN HitNumber IS NULL THEN 0 ELSE HitNumber END) FROM CONTENTITEM where Convert(char(8),pubdate,112)>=@STARTDATE and Convert(char(8),pubdate,112)<=@ENDDATE
SELECT @sSumstat= count(1) FROM statdata where _guid in (select Channelguid from Tab_CounterChannel where haschannel=1) and Convert(char(8),ClickDate,112)>=@STARTDATE and Convert(char(8),ClickDate,112)<=@ENDDATE
SET @sSum = @sSumitem+@sSumstat
DECLARE CUR_MM CURSOR FOR 
select (select title from Tab_CounterChannel where channelguid=a._channelguid) as channelName,_channelguid from contentitem a where _channelguid in (select channelguid from Tab_CounterChannel) group by _channelguid
OPEN CUR_MM
FETCH NEXT FROM CUR_MM INTO @YYMMDD,@YYMMDD1
WHILE @@FETCH_STATUS = 0
BEGIN
SET @CUR_SQL_item=@CUR_SQL_item+N' ,SUM(CASE _channelguid WHEN '''+@YYMMDD1+N''' THEN hitnumber ELSE 0 END) AS [' + case when @YYMMDD is null or @YYMMDD = '' then 'others' else @YYMMDD end + '] '
FETCH NEXT FROM CUR_MM INTO @YYMMDD,@YYMMDD1
END  CLOSE CUR_MM
DEALLOCATE CUR_MMDECLARE CUR_MM CURSOR FOR 
select title,channelguid from Tab_CounterChannel where haschannel = 1 
OPEN CUR_MM
FETCH NEXT FROM CUR_MM INTO @YYMMDD,@YYMMDD1
WHILE @@FETCH_STATUS = 0
BEGIN
SET @CUR_SQL_stat=@CUR_SQL_stat+N' ,SUM(CASE _guid WHEN '''+@YYMMDD1+N''' THEN 1 ELSE 0 END) AS [' + case when @YYMMDD is null or @YYMMDD = '' then 'others' else @YYMMDD end + '] ' FETCH NEXT FROM CUR_MM INTO @YYMMDD,@YYMMDD1

END  CLOSE CUR_MM
DEALLOCATE CUR_MMSET @SQL1 = N' SELECT (ROW_NUMBER() over(order by (select datepart(week, pubdate)) asc)) as weel '
SET @SQL2 = N' SELECT (ROW_NUMBER() over(order by (select datepart(week, ClickDate)) asc)) as weel '
SET @SQL=N' select a.*,b.[实时汇率],b.[外汇走势图],b.[经济日程],b.[各央行利率],b.[各国经济数据],b.[汇市早报],b.[操作建议] from ( '
SET @WSQL=N' from contentitem where 1=1 '+@WSQLDATE+

GROUP BY datepart(week, pubdate) ) as a right JOIN (
'SET @WSQL1 = N' from statData where 1=1 '+@WSQLDATE1+
'
GROUP BY datepart(week, ClickDate) ) as b on a.weel=b.weel
'
SET @SQL_STAT = N'select 
 cast(round([政策法规] * 100 /cast('+cast(@sSum as nvarchar(50))+' as decimal(10,2)),2) as decimal(10,2)) as [dd]
,cast(round([即时信息] * 100 /cast('+cast(@sSum as nvarchar(50))+' as decimal(10,2)),2) as decimal(10,2)) as [dd] from (
 '
SET @SQL_END = N' 
) as c 
'
PRINT(@SQL_STAT+@SQL+@SQL1+@CUR_SQL_item+@WSQL+@SQL2+@CUR_SQL_stat+@WSQL1+@SQL_END)EXEC(@SQL_STAT+@SQL+@SQL1+@CUR_SQL_item+@WSQL+@SQL2+@CUR_SQL_stat+@WSQL1+@SQL_END)
这里print 出来[政策法规]是中文的.但是第二行[即时信息]几时乱码了.怎么解决这个问题

解决方案 »

  1.   

    SET @SQL_STAT = N'select 
     cast(round([政策法规] * 100 /cast('+cast(@sSum as nvarchar(50))+' as decimal(10,2)),2) as decimal(10,2)) as [dd]
    ,cast(round([即时信息] * 100 /cast('+cast(@sSum as nvarchar(50))+' as decimal(10,2)),2) as decimal(10,2)) as [dd] from (
     '
    上面太长了.就看这段就行.这里print 出来[政策法规]是中文的.但是第二行[即时信息]几时乱码了.怎么解决这个问题
      

  2.   

    加上NSET @SQL_STAT = N'select 
     cast(round([政策法规] * 100 /cast('+cast(@sSum as nvarchar(50))+N' as decimal(10,2)),2) as decimal(10,2)) as [dd]
    ,cast(round([即时信息] * 100 /cast('+cast(@sSum as nvarchar(50))+' as decimal(10,2)),2) as decimal(10,2)) as [dd] from (
     '
    SET @SQL_END = N' 
    ) as c 
    '