读书人

为什么存储过程执行后,没有得到想要结

发布时间: 2012-02-10 21:27:42 作者: rapoo

为什么存储过程执行后,没有得到想要结果.急!!!!!!!!!不够再加分
在前台执行后,没有往数据库表hcost2hisdata..H_VoucherCost 里插入数据.
如果把busdate=@cdate 改成一个具体日期(如busdate between '2007.03.01 ' and '2007.03.29 ')就可以.
但是前台有日期选择的,请问这个是什么原因超成的.

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


ALTER PROCEDURE sp_import_voucher_cost
@cdate char(10)
AS

-- 初始化
DELETE hcost2hisdata..H_VoucherCost WHERE BusDate = @cdate

INSERT INTO hcost2hisdata..H_VoucherCost
(BusDate,DeptCode,VoucherNo,Abstract,CostCatCode,Money)
SELECT a.docDate,h.ut_no,a.docID,e.certName,i.costcatcode,b.docJM
FROM hsdata..tb_doc a
INNER JOIN hsdata..tb_docmemo b ON a.docUID = b.docUID
INNER JOIN hsdata..tb_certsum e ON b.certID = e.certID
INNER JOIN hsdata..tb_acndict f ON b.acnID = f.acnID
INNER JOIN hsdata..utcode h ON a.docDpt = h.ut_id
INNER JOIN t_acntsubject i ON f.acncode = i.itemcode
INNER JOIN hsdata..tb_cert j on a.certuid=j.certuid
where a.docstaff!=0 and b.docJM!=0
and (i.costcatcode!= ' ' and i.costcatcode is not null)
and i.costcatcode not in( 'D01 ', 'D02 ', 'D03 ', 'E0301 ', 'E0302 ', 'F0102 ', 'E08 ')
and a.docodate=@cdate


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO



[解决办法]
把日期型都转为一样的格式试试

SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO


ALTER PROCEDURE sp_import_voucher_cost
@cdate char(10)
AS

-- 初始化
DELETE hcost2hisdata..H_VoucherCost WHERE convert(char(10),BusDate,120) = convert(char(10),@cdate,120)

INSERT INTO hcost2hisdata..H_VoucherCost
(BusDate,DeptCode,VoucherNo,Abstract,CostCatCode,Money)
SELECT a.docDate,h.ut_no,a.docID,e.certName,i.costcatcode,b.docJM
FROM hsdata..tb_doc a
INNER JOIN hsdata..tb_docmemo b ON a.docUID = b.docUID
INNER JOIN hsdata..tb_certsum e ON b.certID = e.certID
INNER JOIN hsdata..tb_acndict f ON b.acnID = f.acnID
INNER JOIN hsdata..utcode h ON a.docDpt = h.ut_id
INNER JOIN t_acntsubject i ON f.acncode = i.itemcode
INNER JOIN hsdata..tb_cert j on a.certuid=j.certuid
where a.docstaff!=0 and b.docJM!=0
and (i.costcatcode!= ' ' and i.costcatcode is not null)
and i.costcatcode not in( 'D01 ', 'D02 ', 'D03 ', 'E0301 ', 'E0302 ', 'F0102 ', 'E08 ')
and convert(char(10),a.docodate,120)=convert(char(10),@cdate,120)


GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
------解决方案--------------------


@cdate char(10)

-->


@cdate smalldatetime
[解决办法]
楼主你先看:
SELECT a.docDate,h.ut_no,a.docID,e.certName,i.costcatcode,b.docJM
FROM hsdata..tb_doc a
INNER JOIN hsdata..tb_docmemo b ON a.docUID = b.docUID
INNER JOIN hsdata..tb_certsum e ON b.certID = e.certID
INNER JOIN hsdata..tb_acndict f ON b.acnID = f.acnID
INNER JOIN hsdata..utcode h ON a.docDpt = h.ut_id
INNER JOIN t_acntsubject i ON f.acncode = i.itemcode
INNER JOIN hsdata..tb_cert j on a.certuid=j.certuid
where a.docstaff!=0 and b.docJM!=0
and (i.costcatcode!= ' ' and i.costcatcode is not null)
and i.costcatcode not in( 'D01 ', 'D02 ', 'D03 ', 'E0301 ', 'E0302 ', 'F0102 ', 'E08 ')
and a.docodate= '2007.03.01 '

看这个结果是多少?要是有结果,肯定没问题,如果本来就没结果,肯定不对啊,
数据类型估计得转换一下。楼主看看吧,帮你顶:)

读书人网 >SQL Server

热点推荐