2013-02-19 123 views
1

早安所有插入语句错误消息

我的老板帮我设计它填充137万线的随机数据的查询,他现在问我插入/结果更新到一个空白表格。但由于某种原因,我无法让它工作。

这三列是ArrivalDate,PitchType_Skey和Site_Skey。但是,当我运行我的查询(见下文)时,我收到一条错误消息,我不知道为什么。你能帮我吗?

消息121,级别15,状态1,行2
INSERT语句的选择列表包含多于插入列表中的项。 SELECT值的数量必须与INSERT列的数量相匹配。

查询:

USE Occupancy 

INSERT INTO Bookings (ArrivalDate, Site_Skey, PitchType_Skey) 
    SELECT   
     Time.Date, Site.Site_Skey, Site.SiteWeighting, PitchType.PitchType_Skey, 
     PitchType.PitchTypeWeighting, 
     RAND(checksum(NEWID())) * Site.SiteWeighting * PitchType.PitchTypeWeighting AS Expr1 
    FROM    
     Capacity 
    INNER JOIN 
     Site ON Capacity.Site_Skey = Site.Site_Skey 
    INNER JOIN 
     PitchType ON Capacity.PitchType_Skey = PitchType.PitchType_Skey 
    INNER JOIN 
     Time 
    INNER JOIN 
     AGKey ON Time.ArrivalDayWeighting = AGKey.[Key] ON Capacity.StartDate <= Time.Date AND Capacity.EndDate >= Time.Date 
    CROSS JOIN 
     (SELECT 0 AS col1 
     UNION ALL 
     SELECT 1 AS col1) AS aaav 
    WHERE   
     (Time.CalendarYear = 2010) 
     AND (RAND(checksum(NEWID())) * Site.SiteWeighting * PitchType.PitchTypeWeighting >= 1.22) 

感谢

韦恩

+3

错误很明显:您的INSERT语句定义了** 3列**您的SELECT语句返回** 6列**这将**从不**工作!列**的数量必须匹配** – 2013-02-19 09:35:22

回答

2

错误信息给你答案。您的SELECT列表中的项(6)

Time.Date 
Site.Site_Skey 
Site.SiteWeighting 
PitchType.PitchType_Skey 
PitchType.PitchTypeWeighting 
RAND(checksum(NEWID())) * Site.SiteWeighting * PitchType.PitchTypeWeighting AS Expr1 

与您在INSERT列表做(3)

ArrivalDate 
Site_Skey 
PitchType_Skey 

无论是从您的SELECT列表中删除一些列或一些添加到您的INSERT列表。

由于你没有给你Bookings表的完整结构,我只能猜测,你需要做到这一点

USE Occupancy 
INSERT INTO Bookings 
(
    ArrivalDate, 
    Site_Skey, 
    PitchType_Skey 
) 
SELECT 
    Time.Date, 
    Site.Site_Skey, 
    PitchType.PitchType_Skey 
FROM 
    Capacity 
    INNER JOIN Site ON Capacity.Site_Skey = Site.Site_Skey 
    INNER JOIN PitchType ON Capacity.PitchType_Skey = PitchType.PitchType_Skey 
    INNER JOIN Time 
    INNER JOIN AGKey ON Time.ArrivalDayWeighting = AGKey.[Key] ON Capacity.StartDate <= Time.Date AND Capacity.EndDate >= Time.Date 
    CROSS JOIN 
    (
     SELECT 0 AS col1 
     UNION ALL 
     SELECT 1 AS col1 
    ) AS aaav 
WHERE 
    Time.CalendarYear = 2010 
    AND (RAND(checksum(NEWID())) * Site.SiteWeighting * PitchType.PitchTypeWeighting >= 1.22) 
+0

嗨凯文,那么我如何只选择我想插入到我的表中的结果? – wafw1971 2013-02-19 09:38:36

+1

@ wafw1971:只是**删除**你的SELECT语句中那些你不需要的/不想要的列..... – 2013-02-19 09:43:29

+0

嗨凯文我对SQL很陌生,我在第四周的学习,所以我一直在问问题。 – wafw1971 2013-02-19 09:51:55

0

我已经找到了解决方案,我不敢相信是多么容易,我只需在查询设计器上取消选中我不想要的框。