2013-12-11 38 views
-1

我有一个存储过程在SQL Server 2000中正常工作,但在SQL Server 2012 Express中将数据库移动到的位置发生错误。存储过程在SQL Server 2012中抛出错误,但在SQL Server 2000中正常工作

[SQLServer JDBC驱动程序] [SQLServer] INSERT语句的选择列表包含的项目少于插入列表。 SELECT值的数量必须与INSERT列的数量相匹配。

有人能帮我整理一下吗?

CREATE PROCEDURE spSelectTopCourses 
AS 
    declare @divisor int 
    declare @column int 

    set @column = 6 -- number of columns in the site 

    create table #tmpID (
     CityID int 
    ) 

    insert into #tmpID (CityID) 
     Select top 40 -- total number of cities to be shown 
     c.RID as CityID 
     From Course c 
     Inner join StateRegions Sr on Sr.RID = c.RID 
     Inner join Client_Round cr on cr.CourseID = c.CourseID 
     Group by c.RID 
     Order by Count(cr.OrderID) desc 

    create table #tmp (
     CityID int, 
     CityName varchar(100), 
     TotalOrder int identity(1,1) 
    ) 

insert into #tmp (CityID, CityName, TotalOrder) 
    Select distinct 
      sr.RID as CityID, 
      sr.Rname as CityName 
     From 
      #tmpID tid 
     Inner join StateRegions Sr on Sr.RID = tid.CityID 
     Group by Sr.RName, sr.RID 
     Order by sr.RName 

    select @divisor = ceiling(count(*) * 1.0/@column) 
    from #tmp 

    create table #tmpC (
     Position int 
    ) 

    declare @i int 
    set @i = 1 

    while @i <= @divisor * @column 
    begin 
     insert into #tmpC(Position) 
      select @i 
     set @i = @i + 1 
    end 

    select 
     t.CityID, t.CityName + ' Golf' CityName, cnt.CountryID, c.Position, 
     (c.Position - 1) % @divisor WebOrder1, 
     (c.Position - 1)/@divisor WebOrder2 
    from 
     #tmpC c 
    left join #tmp t on t.TotalOrder = c.Position 
    inner join StateRegions sr on sr.RID = t.CityID 
    inner join CountryStates cs on cs.StateID = sr.StateID 
    inner join Country cnt on cnt.CountryID = cs.CountryID 
    order by WebOrder1, WebOrder2 

    drop table #tmpC 
    drop table #tmp 
    drop table #tmpID 
+1

答案只是在错误消息:) –

+0

那么,我删除了TotalOrder,一切都好:-) – BigHonkingDeal

回答

1
insert into #tmp (CityID, CityName, TotalOrder) 
Select distinct sr.RID as CityID, 
    sr.Rname as CityName 
From #tmpID tid 
Inner join StateRegions Sr on Sr.RID = tid.CityID 
Group by Sr.RName, 
    sr.RID 
Order by sr.RName 

你试图插入3列到#tmp,但查询只返回2列

我怀疑,你想COUNT(*)总和(订单)作为第三列

+3

它可能在SQL Server 2000上工作,因为它插入NULL到额外的列,并在2012年改变了行为。 – Dai

+0

真的,他应该从插入列表中删除“TotalOrder”,因为它是每个DDL的ID列。 – JNK

+0

很好,没注意到...谢谢 – Sparky

相关问题