INSERT INTO SELECT给出:列名或提供的值数与表定义不匹配

时间:2017-01-19 04:08:45

标签: sql-server common-table-expression insert-into

我在执行以下代码时收到此错误消息。

列名或提供的值与表定义不匹配。

       --DROP TABLE #UniqueBuildingUsageFkAndBuildingFk
         CREATE TABLE #UniqueUsageFkAndBuildingFk (
         Building_fk INT NOT NULL 
         ,Usage_fk INT NOT NULL DEFAULT(0)
         );

         ;WITH UnknownUsageFkAndBuildingFkCTE AS (
        SELECT DISTINCT mm.Building_fk, 0 AS Usage_fk FROM Customers.StandardizedRecord sr
        JOIN Customers.MidasMatch mm ON mm.CustomersBuildingNumberKey = sr.CustomersBuildingNumberKey
        WHERE sr.CustomersBuildingNumberKey NOT IN (SELECT DISTINCT emm.CustomersBuildingNumberKey FROM
        [Customers].[CustomersBuildingNumberKeyCustomersUsageXRef] ebu 
        JOIN [Customers].[MidasMatch] emm ON emm.CustomersBuildingNumberKey = ebu.CustomersBuildingNumberKey WHERE emm.Building_fk > 0)
        AND mm.Building_fk > 0 
        ) 
        INSERT INTO #UniqueUsageFkAndBuildingFk 
        SELECT Building_fk, Usage_fk
        FROM UnknownUsageFkAndBuildingFkCTE;

但是当我注释掉INSERT INTO #UniqueUsageFkAndBuildingFk行时,我会返回所需的结果集。

我迷失了......

2 个答案:

答案 0 :(得分:1)

在您的表Building_fk, Usage_fk, CustomersBuildingNumberKey中,您有3列(INSERT INTO #UniqueUsageFkAndBuildingFk SELECT Building_fk, Usage_fk, 0 FROM UnknownUsageFkAndBuildingFkCTE; )。因此,在插入此表时,您必须为这三列

指定值
INSERT INTO #UniqueUsageFkAndBuildingFk (Building_fk, Usage_fk)
SELECT Building_fk, Usage_fk
FROM UnknownUsageFkAndBuildingFkCTE;

或者您可以在插入中指定列

{{1}}

答案 1 :(得分:0)

正如Abdul在上面的回答,我意识到我错过了(Building_fk,Usage_fk)行INSERT INTO #UniqueUsageFkAndBuildingFk