【发布时间】:2014-07-22 14:10:10
【问题描述】:
我仍然收到一个奇怪的错误:
INSERT 语句的选择列表包含比插入列表更多的项目。 SELECT 值的数量必须与 INSERT 列的数量相匹配。
代码:
INSERT INTO @tab (Phone)
select t2.Phone
from
(
SELECT DISTINCT top 999 t3.Phone, MIN(t3.Ord)
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
) t2
这个想法是从@tabTemp 中选择所有电话号码及其行顺序。然后我想区分它们并将不同的数字插入表@tab。 Top 999 仅用于 order by 目的,因为我将它用于 function (UDF)。
结构如下:
declare @tabTemp TABLE
(
Phone1 varchar(128) NULL,
Phone2 varchar(128) NULL,
Ord int
);
declate @tab TABLE
(
Phone varchar(max) NULL
);
已编辑:
完整代码
CREATE FUNCTION dbo.myFnc(@PID int, @VID int, @JID int, @ColumnNo int)
RETURNS @tab TABLE
(
Phone varchar(max) NULL
)
AS
BEGIN
if @PID is null and @VID is null and @JID is null
return;
if @ColumnNo is null or (@ColumnNo<>2 and @ColumnNo<>3 and @ColumnNo<>6)
return;
declare @catH int;
set @catH = dbo.fncGetCategoryID('H','tt'); -- just returning int value
declare @kvalP int;
set @kvalP = dbo.fncGetCategoryID('P','te');
declare @kvalR int;
set @kvalR = dbo.fncGetCategoryID('R','te');
declare @tabTemp TABLE
(
Phone1 varchar(128) NULL,
Phone2 varchar(128) NULL,
Ord int
);
-- finding parent subject + current one
WITH subj AS(
SELECT *
FROM Subjekt
WHERE
(ID = @PID and @PID is not null)
or
(ID = @VID and @VID is not null)
or
(ID = @JID and @JID is not null)
UNION ALL
SELECT t.*
FROM Subjekt t
INNER JOIN subj r ON r.ID = t.ID
)
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
subj s
,SubjektPerson so
,Persons o
,recSetup idS
,recSetup idSO
,recSetup idO
where 1=1
and idO.isValid=1
and idSO.isValid=1
and idS.isValid=1
and idSO.ID0=so.ID
and idS.ID0=s.ID
and idO.ID0=o.ID
and so.ID_PERSON=o.ID
and so.ID_SUBJECT=s.ID
and (o.TYP=@kvalP or o.TYP=@kvalR)
)
INSERT INTO @tab (Phone)
select t2.Phone
from
(
SELECT DISTINCT top 999 t3.Phone, MIN(t3.Ord)
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
) t2
RETURN
END
【问题讨论】:
-
你的桌子上有触发器吗?
-
@podiluska 这些是表变量,因此任何触发器都不在这些变量上。
-
@SeanLange 或者这可能只是一个例子,而不是真正的表格......
-
它们只是表变量。所以没有触发器。
标签: sql sql-server sql-insert insert-into