SQL Server的:希望将数据插入一列,剩下的空值:不让我

这里是我的脚本:

INSERT INTO AP09 SELECT cds AS CDSCODE FROM P_Schools WHERE active = 1;

有在AP09表10列。 但所有的主键(CDSCODE)为空。 我只是想从另一个表中插入CDSCODEs,并有其余的都默认为null。 相反,我得到一个错误:

SQL Server Database Error: Insert Error: Column name or number of supplied values does not match table definition.

如果我提供空值的权数,插入的作品。 但是,微软文档中说(为INSERT命令):

The Database Engine automatically provides a value for the column if the column: --Has an IDENTITY property. The next incremental identity value is used. --Has a default. The default value for the column is used. --Has a timestamp data type. The current timestamp value is used. --Is nullable. A null value is used. --Is a computed column. The calculated value is used.

任何人都知道为什么这似乎并不像广告奏效? 这是花费了我很多时间,因为我必须这样做了许多表! (这是SQL Server 2005的BTW)

--------------解决方案-------------

由于表AP09CDSCODE不要有相同的列数......你需要指定COLS插入。 尝试这样的事情 -

INSERT INTO
AP09 (Col1)

SELECT
cds AS CDSCODE
FROM
P_Schools
WHERE
active = 1;

提供一个列的列表,以insert

insert into foo (col1) select ...

指定在选择列表的一列,不指定在表10的列,它是被装入。 SQL不知道也不会认为它可以计算出加载到其列在表- you'll必须指定要插入的列。 (这只是“假设”,如果你提供尽可能多的列,因为要插入的。)

SQL猜测和犯错会比只是说“废话,我不知道”非常非常糟糕。 是的,这似乎是一个容易的选择,但他们不得不写在每一个可能发生的情况制定的算法,这是不可能的。

INSERT INTO
AP09 (YourTargetColumnName)
SELECT
cds AS CDSCODE
FROM
P_Schools
WHERE
active = 1;

行为和文档是正确的。

当执行insert into foo select att1, att2...你需要提供在SELECT语句中列的确切人数。

是“自动提供一个价值......为空的列”微软文档的说法就在下面insert语句,其中插入值的列被明确列出的类型:

INSERT INTO Cities (Location)
VALUES ( 'Chicago' );

在上面的语句中,如果有9个是公认的空等栏目,它们将被隐式填充空。

分类:SQL服务器 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 2.002 (s). 10 q(s)