SR0010:避免在聯結資料表或檢視表時,使用已被取代的語法

RuleId

SR0010

分類

Microsoft.Design

中斷變更

中斷

原因

在標籤與檢視之間的一個或多聯結使用已被取代的語法 (例如 WHERE 子句中的 =、*= 或 =*) 而非目前的語法。

規則描述

使用已被取代之語法的聯結可分為兩類:

  • 內部聯結
    對於內部聯結,在資料行中被聯結的值,都會使用比較運算子,諸如 =、<、> = 等等來進行比較。 如果每個資料表至少有一個資料列符合內部聯結,內部聯結就只會傳回資料列。

  • 外部聯結
    外部聯結傳回至少一個資料表的所有資料列,或是在 FROM 子句中指定的檢視,只要這些資料列符合任何 WHERE 或 HAVING 搜尋條件。 如果您使用 *= 或 =* 指定外部聯結,您就在使用已被取代的語法。

如何修正違規

若要修正內部聯結中的違規,請如本主題稍後將示範的範例所示,使用 INNER JOIN 語法。 如需詳細資訊,請參閱 Microsoft 網站上的這個網頁:使用內部聯結 (英文)。

若要修正外部聯結中的違規,如本主題稍後將示範的範例所示,使用適當的 OUTER JOIN 語法。 您有下列選項:

  • 左方外部聯結或左方聯結

  • 右方外部聯結或右方聯結

    注意事項注意事項

    Transact-SQL 支援完整外部聯結和完整聯結,但是該類型的聯結沒有上述語法。

如需詳細資訊,請參閱 Microsoft 網站上的這個網頁:使用外部聯結 (英文)。

隱藏警告的時機

您不應該隱藏這項警告。 已被取代的語法可能不適用於未來的 SQL Server 版本,因此您應該修正所有執行個體。

範例

六個範例示範下列選項:

  1. 範例 1 示範內部聯結的被取代語法。

  2. 範例 2 示範如何更新範例 1 以使用目前語法。

  3. 範例 3 示範左方外部聯結的被取代語法。

  4. 範例 4 示範如何更新範例 2 以使用目前語法。

  5. 範例 5 示範右方外部聯結的已取代語法。

  6. 範例 6 示範如何更新範例 5 以使用目前語法。

-- Example 1: Deprecated syntax for an inner join
SELECT [T2].[c3], [T1].[c3] 
FROM [dbo].[Table2] T2, [dbo].[Table1] T1 
WHERE [T1].[ID] = [T2].[ID]

-- Example 2: Current syntax for an inner join
SELECT [T2].[c3], [T1].[c3] 
FROM [dbo].[Table2] AS T2
INNER JOIN [dbo].[Table1] as T1
ON [T2].[ID] = [T2].[ID]

-- Example 3: Deprecated syntax for a left outer join
SELECT [T2].[c3], [T1].[c3] 
FROM [dbo].[Table2] T2, [dbo].[Table1] T1 
WHERE [T1].[ID] *= [T2].[ID]

-- Example 4: Fixed syntax for a left outer join
SELECT [T2].[c3], [T1].[c3] 
FROM [dbo].[Table2] AS T2
LEFT OUTER JOIN [dbo].[Table1] as T1
ON [T2].[ID] = [T2].[ID]

-- Example 5: Deprecated syntax for a right outer join
SELECT [T2].[c3], [T1].[c3] 
FROM [dbo].[Table2] T2, [dbo].[Table1] T1 
WHERE [T1].[ID] =* [T2].[ID]

-- Example 6: Fixed syntax for a right outer join
SELECT [T2].[c3], [T1].[c3] 
FROM [dbo].[Table2] AS T2
RIGHT OUTER JOIN [dbo].[Table1] as T1
ON [T2].[ID] = [T2].[ID]

請參閱

概念

分析資料庫程式碼以改善程式碼品質