sql 2008 尝试将不可为NULL的列的值设置为NULL
我有一个查询,在原来的SQL2000中执行没有问题,但换到SQL2008就提示:
尝试将不可为NULL的列的值设置为NULL。请大家帮我看一下:
SELECT A.001,A.002,A.003,B.007,B.008,C.002
FROM 表A as A
LEFT JOIN 表2 as B on A.013=B.001 AND A.014=B.002
LEFT JOIN 表3 as C on A.010=C.001
在网上找了一大圈,可能是因为A.013与A.014有null值的原因,我换成下面的也不行:
SELECT A.001,A.002,A.003,B.007,B.008,C.002
FROM 表A as A
LEFT JOIN 表2 as B on ISNULL(A.013,'')=B.001 AND ISNULL(A.014,'')=B.002
LEFT JOIN 表3 as C on A.010=C.001
但实际确实要取表A的全部内容,也就是说要用到LEFT JOIN的方式,执行时总会提示:尝试将不可为NULL的列的值设置为NULL
------解决方案-------------------- ISNULL(A.013,'')=B.001 AND ISNULL(A.014,'')=B.002
条件语句里面,没见过这样写的..
------解决方案-------------------- 引用: ISNULL(A.013,'')=B.001 AND ISNULL(A.014,'')=B.002
条件语句里面,没见过这样写的..
这样写是没有问题的,您可以试一下。
我觉得LZ的问题,应该是表中设定的时候,该栏位为not null的,但是在做连接的时候为null值,才导致这样的错误。
------解决方案-------------------- 如果只是警告信息可不管它。
------解决方案-------------------- left join 是容易产生null
但是 查询结果不应该用表的约束约束
------解决方案-------------------- 通过测试,在查询结果集上,可以为null,没有约束。
http://topic.csdn.net/u/20091207/11/ee1a5b2e-8776-4616-ae6b-d775e41c1449.html
CREATE TABLE TestNull
(
id INT NOT NULL,
NAME NVARCHAR(20) NOT null
)
INSERT INTO TestNull
SELECT '1','evan'
UNION ALL
SELECT '2','sam'
CREATE TABLE A
(
id INT ,
NAME NVARCHAR(20)
)
INSERT INTO A
SELECT '1',N'张三,李四'
UNION ALL
SELECT '2',N'王五'
UNION ALL
SELECT '2',N'马六,朱七'
SELECT * FROM A a
left JOIN TestNull t
ON a.ID=t.id
ID NAME id NAME
----------- ------------------------------------
1 张三,李四 1 evan
2 王五 2 sam
3 马六,朱七 NULL NULL
(3 row(s) affected)
------解决方案-------------------- 看来问题还是出在这儿了:
ISNULL(A.013,'')=B.001 AND ISNULL(A.014,'')=B.002