一行或多行包含违反SQL脚本中的非null,唯一或外键约束的值

时间:2012-06-19 06:50:46

标签: asp.net sql-server

需要帮助。

我只是想知道为什么会发生这个错误。以下是有关的剧本。

    SELECT loc.ID
    ,loc.LocCode
    ,loc.LocName
    ,st.StateName
    ,reg.RegionName
    ,ctry.CountryName
    ,ISNULL(CONVERT(DATE, loc.UpdatedDate), CONVERT(DATE,loc.CreatedDate)) AS [ModifiedDate]
    ,stf.Name AS [ModifiedBy]
FROM Spkr_Country AS ctry WITH (NOLOCK)
INNER JOIN Spkr_Location AS loc WITH (NOLOCK) ON ctry.ID = loc.CountryID
INNER JOIN Spkr_State AS st WITH (NOLOCK) ON loc.StateID = st.ID
INNER JOIN Spkr_Region AS reg WITH (NOLOCK) ON loc.RegionID = reg.ID
INNER JOIN Staff AS stf ON ISNULL(loc.UpdatedBy, loc.CreatedBy) = stf.StaffId
WHERE (loc.IsActive = 1)
    AND (
        (@LocCode = '')
        OR (
            @LocCode <> ''
            AND loc.LocCode LIKE @LocCode + '%'
            )
        )
    AND (
        (@RegionID < 1)
        OR (
            @RegionID > 0
            AND loc.RegionID = @RegionID
            )
        )
    AND (
        (@StateID < 1)
        OR (
            @StateID > 0
            AND loc.StateID = @StateID
            )
        )
    AND (
        (@CountryID < 1)
        OR (
            @CountryID > 0
            AND loc.CountryID = @CountryID
            )
        )

此处可能发生的错误INNER JOIN Staff AS stf ON ISNULL(loc.UpdatedBy, loc.CreatedBy) = stf.StaffId我想要的是,如果loc.UpdatedBy为空,则会使用loc.CreatedBy列。但是,当我使用它时,它会产生上述错误。

在数据库中,loc.CreatedBy不为空,而loc.UpdatedBy可以为空。

我通过运行脚本来检查它,但它工作正常。

我该怎么做?我的代码出了什么问题?请帮忙。

1 个答案:

答案 0 :(得分:0)

我将内部连接条件更改为此行代码。 INNER JOIN Staff AS stf ON COALESCE(loc.UpdatedBy, loc.Createdby) = stf.StaffId

然而,我仍然不知道为什么它不起作用?在这种情况下使用COALESCE()ISNULL()有什么不同?