--定时刷新IP记录
create procedure sp_sumNip
--1、来路IP总量写入users_gjjSELECT userURL, COUNT(*) AS nip into #tb1
FROM (SELECT userURL
        FROM ipList_gjj
        WHERE oi = 'in') a
GROUP BY userURL
ORDER BY userURLupdate users_gjj set inip=a1.nip
from #tb1 a1
where users_gjj.url=a1.userURLgo--2、把来路24小时IP总量写入users_gjj
SELECT userURL, COUNT(*) AS nip into #tb2
FROM (SELECT userURL
        FROM ipList_gjj
        WHERE oi = 'in' and dt=getdate()) aa
GROUP BY userURL
ORDER BY userURLupdate users_gjj set inip=aa2.nip
from #tb2 aa2
where users_gjj.url=aa2.userURLgo
--3、来路IP总量写入users_gjjSELECT userURL, COUNT(*) AS nip into #tb3
FROM (SELECT userURL
        FROM ipList_gjj
        WHERE oi = 'out') b
GROUP BY userURL
ORDER BY userURLupdate users_gjj set inip=b1.nip
from #tb3 b1
where users_gjj.url=b1.userURLgo
--4、把来路24小时IP总量写入users_gjjSELECT userURL, COUNT(*) AS nip into #tb4
FROM (SELECT userURL
        FROM ipList_gjj
        WHERE oi = 'out') bb
GROUP BY userURL
ORDER BY userURLupdate users_gjj set inip=bb2.nip
from #tb4 bb2
where users_gjj.url=b2.userURLgo创建上面的存储过程提示下面的错误: 但是把上边的4块代码在"企业管理器"中运行却是对的!服务器: 消息 156,级别 15,状态 1,过程 sp_sumNip,行 5
在关键字 'SELECT' 附近有语法错误。
服务器: 消息 2714,级别 16,状态 6,行 3
数据库中已存在名为 '#tb2' 的对象。
服务器: 消息 2714,级别 16,状态 6,行 3
数据库中已存在名为 '#tb3' 的对象。
服务器: 消息 107,级别 16,状态 2,行 10
列前缀 'b2' 与查询中所用的表名或别名不匹配。

解决方案 »

  1.   

    服务器: 消息 156,级别 15,状态 1,过程 sp_sumNip,行 5
    在关键字 'SELECT' 附近有语法错误。-- 少了个AScreate procedure sp_sumNip
    --1、来路IP总量写入users_gjj
    AS
    SELECT userURL, COUNT(*) AS nip into #tb1
    ……
      

  2.   

    as begin end 
    好像都缺
      

  3.   

    不要 begin end 应该可以吧,我这儿不要循环
    修改了,还有一点问题,dt=getdate() 修改成 getdate() - dt <= 24 (小时) 代码怎么写?
      

  4.   

    加了AS 出现下面提示,怎么不是#tb1存在呢? 服务器: 消息 2714,级别 16,状态 6,行 3
    数据库中已存在名为 '#tb2' 的对象。
    服务器: 消息 2714,级别 16,状态 6,行 3
    数据库中已存在名为 '#tb3' 的对象。
    服务器: 消息 2714,级别 16,状态 6,行 3
    数据库中已存在名为 '#tb4' 的对象。
      

  5.   

    -- 生成临时表前先判断临时表是否存在,若存在先删除再生成临时表    -- 判断要创建临时表是否存在
        IF OBJECT_ID('Tempdb.dbo.#P_CO_PERMONTH1030') IS NOT NULL
            DROP TABLE #P_CO_PERMONTH1030
      

  6.   

    4个小块,每一个小块后的go 去掉就OK了这是为什么?
      

  7.   

    create procedure sp_sumNip
    --少个as
    as
    ......
    update users_gjj set inip=bb2.nip
    from #tb4 bb2
    where users_gjj.url=b2.userURL
    --#tb4是给的表别名吗?在where 子句中的对象b2应该是bb2吧
    要该为
    update users_gjj set inip=bb2.nip
    from #tb4 bb2
    where users_gjj.url=bb2.userURL
      

  8.   

    GO不是Transact-SQL 语句 
    只是传送给查询分析器识别的命令你现在写的存储过程是
    create procedure XXX
    as
    select...
    GO
    那么查询分析器会认为以上的语句为一个小结,那么下面的语句就不包含在存储过程里了,那么下面的语句肯定就立马执行了。
    如果去掉了所有GO,那么查询分析器就会认为create procedure XXX以后的语句都是可以他的内容只要语法没错误,就过关了!
    你可以试试只保留最后一个GO,这样也可以执行成功!