Sql INSERT INTO from SELECT:INSERT语句的SELECT列表包含的项目多于INSERT列表
我仍然得到一个奇怪的错误: INSERT语句的select列表包含的项目多于INSERT列表。SELECT值的数量必须与INSERT列的数量匹配 代码: 这个想法是从@tabTemp中选择所有电话号码,并按其行顺序排列。然后我想区分它们,并在@tab表中插入不同的数字。TOP999仅用于按目的排序,因为我将其用于函数UDF 结构如下:Sql INSERT INTO from SELECT:INSERT语句的SELECT列表包含的项目多于INSERT列表,sql,sql-server,sql-insert,insert-into,Sql,Sql Server,Sql Insert,Insert Into,我仍然得到一个奇怪的错误: INSERT语句的select列表包含的项目多于INSERT列表。SELECT值的数量必须与INSERT列的数量匹配 代码: 这个想法是从@tabTemp中选择所有电话号码,并按其行顺序排列。然后我想区分它们,并在@tab表中插入不同的数字。TOP999仅用于按目的排序,因为我将其用于函数UDF 结构如下: declare @tabTemp TABLE ( Phone1 varchar(128) NULL, Phone2 varcha
declare @tabTemp TABLE
(
Phone1 varchar(128) NULL,
Phone2 varchar(128) NULL,
Ord int
);
declate @tab TABLE
(
Phone varchar(max) NULL
);
编辑:
完整代码
不确定为什么在同一查询上有distinct和group by。您可以大大简化此过程
INSERT INTO @tab (Phone)
SELECT top 999 t3.Phone
FROM
(
select Phone1 as Phone, Ord from @tabTemp
union all
select Phone2 as Phone, Ord from @tabTemp
) t3
GROUP BY t3.Phone
ORDER BY MIN(t3.Ord) asc, t3.Phone
现在对于您收到的错误消息,它似乎不是来自这段代码,因为语法很好,列数匹配正确。我怀疑这个错误在您代码的前面某个地方
此外,您可能需要考虑使用临时表代替表变量,因为在这些表中您似乎有很多行。在表面上,
看来,您可能正在触发查询规划程序bug或其他什么。有许多不确定的事情正在发生: 该联合体将同一个表中的所有数据都分配给它自己 使用GROUPBY和distinct 我不知道你说的是什么意思 TOP999仅用于按目的排序,因为我将其用于函数UDF你是说整个查询是在一个UDF中执行的吗?如果是这样,是否还有其他查询可能会导致该错误?您关注的插入错误。这是不匹配的一个:
INSERT INTO @tabTemp (Phone1,Phone2)
(select
(case when o.TYP1=@catH then o.TEL1 else null end) Phone1
,(case when o.TYP2=@catH then o.TEL2 else null end) Phone2
,so.POR_C
from
...
插入列表中有两列,子选择中有三列。我不能仅仅从命名来判断POR_C是否应该在Ord列中结束。您的表上有触发器吗?@podiluska这些是表变量,所以没有任何触发器。@SeanLange或这可能只是一个示例,而不是真正的表……它们只是表变量。因此,这里没有触发器。Union all是因为选择了两个不同的列Phone1和Phone1到分离的行中
INSERT INTO @tab (Phone)
SELECT top 999 t3.Phone
FROM
(
select Phone1 as Phone, Ord from @tabTemp
union all
select Phone2 as Phone, Ord from @tabTemp
) t3
GROUP BY t3.Phone
ORDER BY MIN(t3.Ord) asc, t3.Phone
INSERT INTO @tabTemp (Phone1,Phone2)
(select
(case when o.TYP1=@catH then o.TEL1 else null end) Phone1
,(case when o.TYP2=@catH then o.TEL2 else null end) Phone2
,so.POR_C
from
...