添加两列时存储过程出错
Stored procedure giving error while adding two more columns
我有一个 SP,在我添加两列之前它工作正常。现在,在添加了两列之后,它开始给出错误 as
The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.
但是我已经插入了那些列。
两个新添加的列是
Dept_received varchar(110), doc_type varchar(110)
下面是我的SP
ALTER PROCEDURE [dbo].[Inward_Rec_Dept_doc]
@From_date Datetime,
@To_date Datetime
AS
BEGIN
CREATE TABLE #temp(
Dept_received varchar(110), doc_type varchar(110), date datetime, Total int,doc_From_To varchar(50),Inward int, First_Level_Transfer int,
Data_Entry_Transfer int,
Second_Level_Transfer int, Outward_Transfer int,
Closed int, Communication_Transfer int, Returned int
)
INSERT INTO #temp
(Dept_received, doc_type, date, Total,doc_From_To, Inward, First_Level_Transfer,
Data_Entry_Transfer,
Second_Level_Transfer, Outward_Transfer,
Closed, Communication_Transfer, Returned)
SELECT
doc_date, COUNT(*),
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select min(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
+ ' - '+
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select max(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
,SUM(
CASE
WHEN status_flag in ('6','23') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('4','26','24') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('15','20') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('17','21') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('18','27') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='5' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='16' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='14' THEN 1 ELSE 0
END)
FROM inward_doc_tracking_hdr aa
WHERE doc_date between @From_date and @To_date
--AND status_flag <> '6'
GROUP BY doc_date, Dept_received, doc_type
END
Select * from #temp
我正在使用 sql-server-2005
请帮我看看错误是什么
更新查询
ALTER PROCEDURE [dbo].[Inward_Rec_Dept_doc]
@From_date Datetime,
@To_date Datetime
AS
BEGIN
CREATE TABLE #temp(
Dept_received datetime,
doc_type varchar(110), date datetime, Total int,doc_From_To varchar(50),
Inward int, First_Level_Transfer int,
Data_Entry_Transfer int,
Second_Level_Transfer int, Outward_Transfer int,
Closed int, Communication_Transfer int, Returned int
)
INSERT INTO #temp
(
Dept_received,
doc_type,
date,
Total,
doc_From_To,
Inward,
First_Level_Transfer,
Data_Entry_Transfer,
Second_Level_Transfer,
Outward_Transfer,
Closed,
Communication_Transfer,
Returned
)
SELECT
doc_date, COUNT(*),
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select min(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
+ ' - '+
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select max(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
,SUM(
CASE
WHEN status_flag in ('6','23') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('4','26','24') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('15','20') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('17','21') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('18','27') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='5' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='16' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='14' THEN 1 ELSE 0
END),1,1
FROM inward_doc_tracking_hdr aa
WHERE doc_date between @From_date and @To_date
--AND status_flag <> '6'
GROUP BY doc_date, dept_received, doc_type
END
Select * from #temp
ALTER PROCEDURE [dbo].[Inward_Rec_Dept_doc]
@From_date Datetime,
@To_date Datetime
AS
BEGIN
CREATE TABLE #temp(
Dept_received varchar(110),
doc_type varchar(110), date datetime, Total int,doc_From_To varchar(50),
Inward int, First_Level_Transfer int,
Data_Entry_Transfer int,
Second_Level_Transfer int, Outward_Transfer int,
Closed int, Communication_Transfer int, Returned int
)
INSERT INTO #temp
(Dept_received, doc_type, date, Total,doc_From_To, Inward, First_Level_Transfer,
Data_Entry_Transfer,
Second_Level_Transfer, Outward_Transfer,
Closed, Communication_Transfer, Returned)
SELECT
doc_date, COUNT(*),
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select min(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
+ ' - '+
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select max(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
,SUM(
CASE
WHEN status_flag in ('6','23') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('4','26','24') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('15','20') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('17','21') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('18','27') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='5' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='16' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='14' THEN 1 ELSE 0
END),1,1 --Add your values in place of 1, your issue will be resolved
FROM inward_doc_tracking_hdr aa
WHERE doc_date between @From_date and @To_date
--AND status_flag <> '6'
GROUP BY doc_date, Dept_received, doc_type
END
Select * from #temp
您可以通过使用 SELECT INTO
:
来避免将 INSERT
ed 列计数和类型与临时 table 结构对齐的麻烦
ALTER PROCEDURE [dbo].[Inward_Rec_Dept_doc]
@From_date Datetime,
@To_date Datetime
AS
BEGIN
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp;
SELECT
doc_date As [date], dept_received, doc_type, COUNT(*) As Total
,(SELECT kk.doc_no FROM inward_doc_tracking_hdr kk WHERE mkey in (SELECT min(mkey) FROM inward_doc_tracking_hdr jj WHERE jj.doc_date = convert(datetime,aa.doc_date,103) ) )
+ ' - '+
(SELECT kk.doc_no FROM inward_doc_tracking_hdr kk WHERE mkey in (SELECT max(mkey) FROM inward_doc_tracking_hdr jj WHERE jj.doc_date = convert(datetime,aa.doc_date,103) ) )
As doc_From_To
,SUM(CASE WHEN status_flag in ( '6', '23') THEN 1 ELSE 0 END) As Inward
,SUM(CASE WHEN status_flag in ( '4', '26', '24') THEN 1 ELSE 0 END) As First_Level_Transfer
,SUM(CASE WHEN status_flag in ('15', '20') THEN 1 ELSE 0 END) As Data_Entry_Transfer
,SUM(CASE WHEN status_flag in ('17', '21') THEN 1 ELSE 0 END) As Second_Level_Transfer
,SUM(CASE WHEN status_flag in ('18', '27') THEN 1 ELSE 0 END) As Outward_Transfer
,SUM(CASE WHEN status_flag = '5' THEN 1 ELSE 0 END) As Closed
,SUM(CASE WHEN status_flag = '16' THEN 1 ELSE 0 END) As Communication_Transfer
,SUM(CASE WHEN status_flag = '14' THEN 1 ELSE 0 END) As Returned
INTO #temp
FROM inward_doc_tracking_hdr aa
WHERE doc_date between @From_date and @To_date
--AND status_flag <> '6'
GROUP BY doc_date, dept_received, doc_type
END
GO
Select * from #temp;
我有一个 SP,在我添加两列之前它工作正常。现在,在添加了两列之后,它开始给出错误 as
The select list for the INSERT statement contains fewer items than the insert list. The number of SELECT values must match the number of INSERT columns.
但是我已经插入了那些列。
两个新添加的列是
Dept_received varchar(110), doc_type varchar(110)
下面是我的SP
ALTER PROCEDURE [dbo].[Inward_Rec_Dept_doc]
@From_date Datetime,
@To_date Datetime
AS
BEGIN
CREATE TABLE #temp(
Dept_received varchar(110), doc_type varchar(110), date datetime, Total int,doc_From_To varchar(50),Inward int, First_Level_Transfer int,
Data_Entry_Transfer int,
Second_Level_Transfer int, Outward_Transfer int,
Closed int, Communication_Transfer int, Returned int
)
INSERT INTO #temp
(Dept_received, doc_type, date, Total,doc_From_To, Inward, First_Level_Transfer,
Data_Entry_Transfer,
Second_Level_Transfer, Outward_Transfer,
Closed, Communication_Transfer, Returned)
SELECT
doc_date, COUNT(*),
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select min(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
+ ' - '+
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select max(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
,SUM(
CASE
WHEN status_flag in ('6','23') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('4','26','24') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('15','20') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('17','21') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('18','27') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='5' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='16' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='14' THEN 1 ELSE 0
END)
FROM inward_doc_tracking_hdr aa
WHERE doc_date between @From_date and @To_date
--AND status_flag <> '6'
GROUP BY doc_date, Dept_received, doc_type
END
Select * from #temp
我正在使用 sql-server-2005
请帮我看看错误是什么
更新查询
ALTER PROCEDURE [dbo].[Inward_Rec_Dept_doc]
@From_date Datetime,
@To_date Datetime
AS
BEGIN
CREATE TABLE #temp(
Dept_received datetime,
doc_type varchar(110), date datetime, Total int,doc_From_To varchar(50),
Inward int, First_Level_Transfer int,
Data_Entry_Transfer int,
Second_Level_Transfer int, Outward_Transfer int,
Closed int, Communication_Transfer int, Returned int
)
INSERT INTO #temp
(
Dept_received,
doc_type,
date,
Total,
doc_From_To,
Inward,
First_Level_Transfer,
Data_Entry_Transfer,
Second_Level_Transfer,
Outward_Transfer,
Closed,
Communication_Transfer,
Returned
)
SELECT
doc_date, COUNT(*),
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select min(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
+ ' - '+
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select max(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
,SUM(
CASE
WHEN status_flag in ('6','23') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('4','26','24') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('15','20') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('17','21') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('18','27') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='5' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='16' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='14' THEN 1 ELSE 0
END),1,1
FROM inward_doc_tracking_hdr aa
WHERE doc_date between @From_date and @To_date
--AND status_flag <> '6'
GROUP BY doc_date, dept_received, doc_type
END
Select * from #temp
ALTER PROCEDURE [dbo].[Inward_Rec_Dept_doc]
@From_date Datetime,
@To_date Datetime
AS
BEGIN
CREATE TABLE #temp(
Dept_received varchar(110),
doc_type varchar(110), date datetime, Total int,doc_From_To varchar(50),
Inward int, First_Level_Transfer int,
Data_Entry_Transfer int,
Second_Level_Transfer int, Outward_Transfer int,
Closed int, Communication_Transfer int, Returned int
)
INSERT INTO #temp
(Dept_received, doc_type, date, Total,doc_From_To, Inward, First_Level_Transfer,
Data_Entry_Transfer,
Second_Level_Transfer, Outward_Transfer,
Closed, Communication_Transfer, Returned)
SELECT
doc_date, COUNT(*),
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select min(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
+ ' - '+
(select kk.doc_no FROM inward_doc_tracking_hdr kk where mkey in (select max(mkey) FROM inward_doc_tracking_hdr jj
where jj.doc_date =convert(datetime,aa.doc_date,103) ) )
,SUM(
CASE
WHEN status_flag in ('6','23') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('4','26','24') THEN 1 ELSE 0
END)
,SUM(
CASE
WHEN status_flag in ('15','20') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('17','21') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag in ('18','27') THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='5' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='16' THEN 1 ELSE 0
END),
SUM(
CASE
WHEN status_flag='14' THEN 1 ELSE 0
END),1,1 --Add your values in place of 1, your issue will be resolved
FROM inward_doc_tracking_hdr aa
WHERE doc_date between @From_date and @To_date
--AND status_flag <> '6'
GROUP BY doc_date, Dept_received, doc_type
END
Select * from #temp
您可以通过使用 SELECT INTO
:
INSERT
ed 列计数和类型与临时 table 结构对齐的麻烦
ALTER PROCEDURE [dbo].[Inward_Rec_Dept_doc]
@From_date Datetime,
@To_date Datetime
AS
BEGIN
IF OBJECT_ID('tempdb..#temp') IS NOT NULL DROP TABLE #temp;
SELECT
doc_date As [date], dept_received, doc_type, COUNT(*) As Total
,(SELECT kk.doc_no FROM inward_doc_tracking_hdr kk WHERE mkey in (SELECT min(mkey) FROM inward_doc_tracking_hdr jj WHERE jj.doc_date = convert(datetime,aa.doc_date,103) ) )
+ ' - '+
(SELECT kk.doc_no FROM inward_doc_tracking_hdr kk WHERE mkey in (SELECT max(mkey) FROM inward_doc_tracking_hdr jj WHERE jj.doc_date = convert(datetime,aa.doc_date,103) ) )
As doc_From_To
,SUM(CASE WHEN status_flag in ( '6', '23') THEN 1 ELSE 0 END) As Inward
,SUM(CASE WHEN status_flag in ( '4', '26', '24') THEN 1 ELSE 0 END) As First_Level_Transfer
,SUM(CASE WHEN status_flag in ('15', '20') THEN 1 ELSE 0 END) As Data_Entry_Transfer
,SUM(CASE WHEN status_flag in ('17', '21') THEN 1 ELSE 0 END) As Second_Level_Transfer
,SUM(CASE WHEN status_flag in ('18', '27') THEN 1 ELSE 0 END) As Outward_Transfer
,SUM(CASE WHEN status_flag = '5' THEN 1 ELSE 0 END) As Closed
,SUM(CASE WHEN status_flag = '16' THEN 1 ELSE 0 END) As Communication_Transfer
,SUM(CASE WHEN status_flag = '14' THEN 1 ELSE 0 END) As Returned
INTO #temp
FROM inward_doc_tracking_hdr aa
WHERE doc_date between @From_date and @To_date
--AND status_flag <> '6'
GROUP BY doc_date, dept_received, doc_type
END
GO
Select * from #temp;