0

これについての助けが必要です。

なぜこのエラーが発生したのか疑問に思っています。以下は関連するスクリプトです。

    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がnullの場合、loc.CreatedBy列を使用することです。ただし、これを使用すると、前述のエラーが発生しました。

データベースでは、loc.CreatedByはnullではありませんが、loc.UpdatedByはnull許容です。

スクリプトを実行して確認しましたが、正常に動作しています。

どうすればいいですか?私のコードの何が問題になっていますか?助けてください。

4

1 に答える 1

0

内部結合条件をこのコード行に変更しました。 INNER JOIN Staff AS stf ON COALESCE(loc.UpdatedBy, loc.Createdby) = stf.StaffId

しかし、なぜそれが機能しなかったのかはまだわかりませんか?このシナリオでCOALESCE()andを使用することの違いは何ですか?ISNULL()

于 2012-06-19T09:13:55.823 に答える