【转】SQL存储过程中SQL语句拼接

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

-- =============================================
-- Author:wgh
-- Create date: 2012-06-07
-- Description: IP访问预统计
-- =============================================
CREATE PROCEDURE [dbo].[PROC_HB_PreStatByIP]
    @BeginTime varchar(50),
    @EndTime varchar(50),
    @TimeType int,    --0代表小时  、 1代表天
    @ChannelID varchar(10)='0',
    @IpAddress varchar(20)
AS
BEGIN
    declare @sql1 nvarchar(2000)

    IF @TimeType = 0
    BEGIN
SET @sql1='SELECT CONVERT(varchar(13),AddTime,120) AS ''日期''
                  ,ChannelID AS ''推广渠道''
                  ,IPAddress AS ''IP地址''
                  ,ViewCount AS ''浏览次数''
                  ,ClickCount AS ''点击次数''
                  FROM dbo.HB_AdPreStatIP WHERE AddTime>='''+@BeginTime+''' AND AddTime<='''+@EndTIme+''''
        IF @ChannelID <> '0'
        BEGIN
           SET @sql1 =@sql1 + ' AND ChannelID='''+@ChannelID+''''
        END
        IF @IpAddress <> ''
        BEGIN
          SET @sql1 =@sql1 +' AND IPAddress='''+@IpAddress+''''
        END
        SET @sql1 =@sql1+' ORDER BY ViewCount DESC'
    END
    ELSE
    BEGIN
SET @sql1='SELECT CONVERT(varchar(10),AddTime,120) AS ''日期''
                          ,ChannelID AS ''推广渠道''
                          ,IPAddress AS ''IP地址''
                          ,SUM(ViewCount)  AS ''浏览次数''
                          ,SUM(ClickCount)  AS ''点击次数'' 
                    FROM dbo.HB_AdPreStatIP WHERE AddTime>='''+@BeginTime+''' AND AddTime<='''+@EndTIme+''''
        IF @ChannelID > '0'
        BEGIN
           SET @sql1 =@sql1 + ' AND ChannelID='''+@ChannelID+''''
        END
        IF @IpAddress <> ''
        BEGIN
          SET @sql1 =@sql1 +' AND IPAddress='''+@IpAddress+''''
        END
SET @sql1 =@sql1 + 'GROUP BY CONVERT(varchar(10),AddTime,120),ChannelID,IPAddress ORDER BY SUM(ViewCount) DESC'
    END
   EXEC sp_executesql @sql1 
END

  

原文地址:https://www.cnblogs.com/daocaowu/p/3291345.html