-1

我想从下面的另一个数据中添加大量数据。但我不能这样做:返回错误。但区域与另一个区域相同。

declare @hrmtable1 table(musterino int, ekno smallint)

insert into @hrmtable1 (musterino , ekno)
    select distinct musterino, ekno
    from hareketmuhasebe (nolock) 
    where islemtarihi >= '20120101'
      and isnull(musterino, 0) <> 0 
      and isnull(musterino, 0) > 9000000 
      and isnull(ekno,0) <> 0 

insert into table1(A,B,C,D,E,. . . . .N) 
   SELECT DISTINCT 
      case when ((select count(*) from table1 where musterino=e.musterino) > 0)
           then (select top 1 *
                 from dbo.table1 
                 where musterino = e.musterino  
                 order by ekno desc)
           else 
                (select 100, e.musterino, e.ekno, 0, K, L, M)
                 from @hrmtable1 e )
      end

错误:

消息 120,级别 15,状态 1,第 10 行
INSERT 语句的选择列表包含的项目少于插入列表。
SELECT 值的数量必须与 INSERT 列的数量相匹配。

4

4 回答 4

0

编辑:由于您编辑了问题,答案仍然保持不变。Select 语句中的列数与代码第二部分中的插入语句列不匹配。

在您的第一个语句中,您正在指定2列,并且在 select 中您有5列,它们应该匹配,这就是错误准确告诉您的内容。

insert into @hrmtable1 (musterino , ekno)
                         ^^^^^^^    ^^^^
select distinct musterino,ekno,defterid,dovizcinsi, subekodu
                ^^^^^^^    ^^^   ^^^^     ^^^^^      ^^^^^

从您的insert陈述看来,您不需要Select陈述中的最后三列。

于 2013-02-20T12:01:17.763 回答
0

如错误中所述,插入中的列数与您提供的值的数量不匹配

insert into @hrmtable1 (musterino , ekno)
select distinct musterino,ekno
from hareketmuhasebe (nolock) 
where islemtarihi >= '20120101'
and isnull(musterino,0) <> 0 and isnull(musterino,0) < 9000000 and isnull(ekno,0) <> 0 
于 2013-02-20T12:02:59.860 回答
0

尝试这个:

insert into @hrmtable1 (musterino , ekno)
select distinct musterino,ekno
from hareketmuhasebe (nolock) 
where islemtarihi >= '20120101'
and isnull(musterino,0) <> 0 and isnull(musterino,0) < 9000000 and isnull(ekno,0) <> 0

您在插入中有 2 列,在 select 子句中有 5 列,这是错误的原因。

于 2013-02-20T12:03:19.720 回答
0

INSERT 语句的选择列表包含的项目少于插入列表。SELECT 值的数量必须与 INSERT 列的数量相匹配。

错误本身告诉你你做错了什么。您在 insert 语句中的列数少于在 select 语句中的列数。

来自MSDN

子查询的选择列表必须与 INSERT 语句的列列表匹配。如果未指定列列表,则选择列表必须与要插入的表或视图中的列匹配。

阅读更多关于惰性的信息

于 2013-02-20T12:03:53.253 回答