无法将值NULL插入列 - 但不存在Null值

时间:2014-03-11 06:19:22

标签: sql sql-server

我有以下CTE将表lTesterID中的Employee列更新为从表提供程序中随机选择的有效ID。

但是我收到了这个错误

  

无法将值NULL插入列'lTesterID',表'Employee';列不允许空值。更新失败。

即使没有Null值,因为我在cteTable4中将其排除。

有人能指出我正确的方向吗?

WITH    cteTable3
          AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY NEWID() ) AS n ,
                        lTesterID
                        FROM     Employee
               WHERE lTesterID= 0 
             ),
        cteTable4
          AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY NEWID() ) AS n ,
                        ISNULL(lTesterID,0) AS lTesterID
               FROM     Provider
               WHERE    Active = 'True'
                        AND lTesterID IS NOT NULL
             )
    UPDATE  cteTable3
    SET     lTesterID = ( SELECT  lTesterID
                            FROM    cteTable4
                            WHERE   cteTable3.n = cteTable4.n
                AND lTesterID IS NOT NULL
                          )

1 个答案:

答案 0 :(得分:2)

您正在cteTable3.n = cteTable4.n的相关子查询中加入CTE。 cteTable3.lTesterID将使用NULL进行更新,其中子查询返回零行。如果您从cteTable4返回的行数少于cteTable3返回的行数,则会发生这种情况。