尝试将不可为 NULL 的列的值设置为 NULL。该怎么处理
尝试将不可为 NULL 的列的值设置为 NULL。
公司服务器从Server2008升级成2012
数据库一直都是SQL2008
自从系统升级之后SQL查询总是报错:尝试将不可为 NULL 的列的值设置为 NULL。
连接到08的系统上查询语句没有问题,连线改成12就报错,是不是server2012在什么地方需要设置什么?
------解决思路----------------------
(A1.ORDER_QTY)
两边括号去掉试试。
------解决思路----------------------
-- 试试别这样写,改为 case when A5.DelayMonth is null then ...else ... end
-- 下面条件里的也改下试试
SELECT A1.CORDER_NO,A1.SEQN,A1.ITEM,A2.ITEM_DESC1, A3.ValvesTypeName,
CASE WHEN ISNULL(A5.DelayMonth,'')= '' THEN DATEADD(DAY,-7,A1.PROMISE_DLVRY) ELSE A5.DelayMonth END AS Plandate,
(A1.ORDER_QTY) , ISNULL(A4.QTY,0) AS QTY,A1.PORDER_P_K
--INTO #CORDER_DTL_temp
FROM CORDER_DTL A1 WITH(NOLOCK)
LEFT JOIN MATERIAL_MST A2 WITH(NOLOCK) ON A1.ITEM=A2.ITEM
INNER JOIN MaterialClass A3 WITH(NOLOCK) ON A3.Item = A1.ITEM
LEFT JOIN MORDER_PlanDate A5 WITH(NOLOCK) ON A5.P_K = A1.P_K
LEFT JOIN corder_mst A6 ON A1.CORDER_NO = A6.CORDER_NO
LEFT JOIN PORDER_DTL A7 ON A1.PORDER_P_K = A7.P_K
LEFT JOIN CORDER_DTL A8 ON ISNULL(A7.LRP_NO,'qq') = ISNULL(A8.LRP_NO,'XX')
LEFT JOIN CORDER_MST A9 ON ISNULL(A8.CORDER_NO = A9.CORDER_NO
LEFT JOIN #InStockBefore A4 ON RTRIM(ISNULL(A1.CORDER_NO,'CA'))+ '-' + LTRIM(ISNULL(A1.SEQN,'CB')) like ISNULL(A4.LRP_NO,'XXXXX')
WHERE A1.C_LINE_STAT IN ('2','3','4','5') AND A2.ITEM_CLAS1 = '1'
AND NOT (A9.CUST_ID = 'V00001' AND ISNULL(A5.DelayMonth,'')='')
AND CONVERT(CHAR(6),CASE WHEN ISNULL(A5.DelayMonth,'')= '' THEN DATEADD(DAY,-7,A1.PROMISE_DLVRY) ELSE A5.DelayMonth END,112) = @Month
AND A6.SALES = '001' AND A2.MB = 'M'
------解决思路----------------------
你贴出来的脚本也不完整,下面这段是有问题
LEFT JOIN CORDER_MST A9 ON ISNULL(A8.CORDER_NO = A9.CORDER_NO
公司服务器从Server2008升级成2012
数据库一直都是SQL2008
自从系统升级之后SQL查询总是报错:尝试将不可为 NULL 的列的值设置为 NULL。
连接到08的系统上查询语句没有问题,连线改成12就报错,是不是server2012在什么地方需要设置什么?
------解决思路----------------------
(A1.ORDER_QTY)
两边括号去掉试试。
------解决思路----------------------
-- 试试别这样写,改为 case when A5.DelayMonth is null then ...else ... end
-- 下面条件里的也改下试试
SELECT A1.CORDER_NO,A1.SEQN,A1.ITEM,A2.ITEM_DESC1, A3.ValvesTypeName,
CASE WHEN ISNULL(A5.DelayMonth,'')= '' THEN DATEADD(DAY,-7,A1.PROMISE_DLVRY) ELSE A5.DelayMonth END AS Plandate,
(A1.ORDER_QTY) , ISNULL(A4.QTY,0) AS QTY,A1.PORDER_P_K
--INTO #CORDER_DTL_temp
FROM CORDER_DTL A1 WITH(NOLOCK)
LEFT JOIN MATERIAL_MST A2 WITH(NOLOCK) ON A1.ITEM=A2.ITEM
INNER JOIN MaterialClass A3 WITH(NOLOCK) ON A3.Item = A1.ITEM
LEFT JOIN MORDER_PlanDate A5 WITH(NOLOCK) ON A5.P_K = A1.P_K
LEFT JOIN corder_mst A6 ON A1.CORDER_NO = A6.CORDER_NO
LEFT JOIN PORDER_DTL A7 ON A1.PORDER_P_K = A7.P_K
LEFT JOIN CORDER_DTL A8 ON ISNULL(A7.LRP_NO,'qq') = ISNULL(A8.LRP_NO,'XX')
LEFT JOIN CORDER_MST A9 ON ISNULL(A8.CORDER_NO = A9.CORDER_NO
LEFT JOIN #InStockBefore A4 ON RTRIM(ISNULL(A1.CORDER_NO,'CA'))+ '-' + LTRIM(ISNULL(A1.SEQN,'CB')) like ISNULL(A4.LRP_NO,'XXXXX')
WHERE A1.C_LINE_STAT IN ('2','3','4','5') AND A2.ITEM_CLAS1 = '1'
AND NOT (A9.CUST_ID = 'V00001' AND ISNULL(A5.DelayMonth,'')='')
AND CONVERT(CHAR(6),CASE WHEN ISNULL(A5.DelayMonth,'')= '' THEN DATEADD(DAY,-7,A1.PROMISE_DLVRY) ELSE A5.DelayMonth END,112) = @Month
AND A6.SALES = '001' AND A2.MB = 'M'
------解决思路----------------------
你贴出来的脚本也不完整,下面这段是有问题
LEFT JOIN CORDER_MST A9 ON ISNULL(A8.CORDER_NO = A9.CORDER_NO