【发布时间】:2016-02-04 08:08:53
【问题描述】:
我需要打印一个空白而不是1900-01-01 SQL 默认值。我有一个案例,当语句编写并试图将其插入我们的存储过程中时。当我插入它时,它会引发一堆错误。
case when 语句应该放在存储过程中的什么位置以产生我们正在寻找的结果?还是有其他错误?
如果有更简洁的方法可以做到这一点,我也愿意。
SELECT
tsd.PACOSTCATID, cc.PACOSTCATNME,convert(varchar(10),MAX(padt),101) + ' - ' + convert(varchar(10),MAX(PAexptdate),101) DateRange,tsh.EMPLOYID,TSD.PAQtyQ
tsd.padt,
case when convert(date, padt) = '1900-01-01'
then ''
ELSE convert(varchar(10),MAX(padt),101) +''+
CONVERT (CHAR(8), padt, 120)
END,
tsd.PAexptdate,
case when convert (date, PAexptdate) = '1900-01-01'
then ''
ELSE convert(varchar(10), PAexptdate,101)+''+
convert (CHAR(8),paexptdate, 120)
END
这是存储过程:
USE
GO
/****** Object: StoredProcedure [dbo].[dd_PA01201_SEL] Script Date: 11/03/2015 14:28:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[dd_PA01201_SEL]
-- dd_PA01201_SEL 'sa'
@UserName varchar(30)
AS
select PAprojid, PABEndDate, pm.PAPROJNUMBER, e2.Extender_Record_ID, pm.CUSTNMBR,
isnull(e1Client.STRGA255,'') as Client,
isnull(e1Union.STRGA255,'') as UnionName,
pm.PAprjclsid, pm.PAprojname,
isnull(e3UsageFrom.DATE1,'') as UsageFrom ,
isnull(e3UsageTo.DATE1,'') as UsageTo,
isnull(e3HoldFrom.DATE1,'') as HoldFrom,
isnull(e3HoldTo.DATE1,'') as HoldTo,
isnull(e1ProductionCo.STRGA255, '') as ProductionCo,
isnull(e2Signatory.STRGA255,'') as Signatory,
isnull(ub.DateRange, '') as DateRange,
isnull(ub.PACOSTCATNME,'') as PACOSTCATNME,
isnull(ub.EMPLOYID,'') as EMPLOYID,
100 * isnull(ub.PAQtyQ,0) as PAQtyQ
from UPR40200EXT ux
join PA01201 pm on pm.PAPROJNUMBER = ux.projectnumber --Project Master
left join EXT01100 e0 on e0.Extender_Window_ID = 'PROJECT_DETAILS' and e0.Extender_Key_Values_1 = pm.PAprojid --Extender Header
left join EXT01100 e2 on e2.Extender_Window_ID = 'PROJ_SIGNATORY' and e2.Extender_Key_Values_1 = pm.CUSTNMBR --Extender Header
left join EXT01101 e1Client on e1Client.Extender_Record_ID = e0.Extender_Record_ID and e1Client.Field_ID = 1290 --Extender client line
left join EXT01101 e1Union on e1Union.Extender_Record_ID = e0.Extender_Record_ID and e1Union.Field_ID = 1299 --Extender union line
left join EXT01102 e3UsageFrom on e3UsageFrom.Extender_Record_ID = e0.Extender_Record_ID and e3UsageFrom.Field_ID = 1269 --Extender usage from line
left join EXT01102 e3UsageTo on e3UsageTo.Extender_Record_ID = e0.Extender_Record_ID and e3UsageTo.Field_ID = 1270 --Extender usage to line
left join EXT01102 e3HoldFrom on e3HoldFrom.Extender_Record_ID = e0.Extender_Record_ID and e3HoldFrom.Field_ID = 1272 --Extender hold from line
left join EXT01102 e3HoldTo on e3HoldTo.Extender_Record_ID = e0.Extender_Record_ID and e3HoldTo.Field_ID = 1274 --Extender hold to line
left join EXT01101 e1ProductionCo on e1ProductionCo.Extender_Record_ID = e0.Extender_Record_ID and e1ProductionCo.Field_ID = 1290 --Extender ProductionCo line
left join EXT01101 e2Signatory on e2Signatory.Extender_Record_ID = e2.Extender_Record_ID and e2Signatory.Field_ID = 1296 --Extender signatory line
--THIS CAUSES THE STORED PROC TO RETURN ONE LINE FOR EACH PAYCODE
left join (
SELECT
tsd.PACOSTCATID, cc.PACOSTCATNME, tsh.EMPLOYID,TSD.PAQtyQ,
convert(varchar(10),MAX(padt),101) + ' - ' + convert(varchar(10),MAX(PAexptdate),101) DateRange
from UPR10301 ub
join PA30100 tsh on tsh.BACHNUMB = ub.BACHNUMB
join PA30101 tsd on tsd.PATSNO = tsh.PATSNO
join PA01001 cc on cc.PACOSTCATID = tsd.PACOSTCATID
where ub.MKDBYUSR = @UserName
and ub.UPRBCHMK = 1
group by ub.BACHNUMB,tsd.PACOSTCATID,cc.PACOSTCATNME, tsh.EMPLOYID,TSD.PAQtyQ
) ub on 1=1
--select * from EXT01100 where Extender_Window_ID = 'PROJ_SIGNATORY ' and Extender_Key_Values_1 = 'anot0001'
--select * from EXT01101 where Extender_Record_ID = 5194
--select * from pa01201
-- update UPR40200EXT set ProjectNumber = 'ALLI2C40094 '
【问题讨论】:
-
请修正该格式,它很难阅读。您可以通过添加 4 个空格来获取代码样式格式。
-
@davejagoda 是对的。你的帖子真的很糟糕。如果你甚至没有花时间提出一个好问题,你很难要求别人的时间来帮助你。下次请自己做。此外,您正在写一些错误,但您没有在您的问题中发布它们,即使它是最重要的信息之一。你无法修复你不知道的错误。
-
什么错误?进行一些基本的故障排除并单独测试你的案例语句的每个分支,以找出哪个引发了错误
-
好的,感谢您的帮助。我知道格式很糟糕,我只是不知道如何修复它。显然我是新手——在这里学习和挣扎。但是感谢那些提供帮助的人。如果我无法弄清楚,我会尝试这些建议并发布错误。