SR0010:避免在聯結資料表或檢視表時,使用已被取代的語法
RuleId |
SR0010 |
分類 |
Microsoft.Design |
中斷變更 |
中斷 |
原因
在標籤與檢視之間的一個或多聯結使用已被取代的語法 (例如 WHERE 子句中的 =、*= 或 =*) 而非目前的語法。
規則描述
使用已被取代之語法的聯結可分為兩類:
內部聯結
對於內部聯結,在資料行中被聯結的值,都會使用比較運算子,諸如 =、<、> = 等等來進行比較。 如果每個資料表至少有一個資料列符合內部聯結,內部聯結就只會傳回資料列。外部聯結
外部聯結傳回至少一個資料表的所有資料列,或是在 FROM 子句中指定的檢視,只要這些資料列符合任何 WHERE 或 HAVING 搜尋條件。 如果您使用 *= 或 =* 指定外部聯結,您就在使用已被取代的語法。
如何修正違規
若要修正內部聯結中的違規,請如本主題稍後將示範的範例所示,使用 INNER JOIN 語法。 如需詳細資訊,請參閱 Microsoft 網站上的這個網頁:使用內部聯結 (英文)。
若要修正外部聯結中的違規,如本主題稍後將示範的範例所示,使用適當的 OUTER JOIN 語法。 您有下列選項:
左方外部聯結或左方聯結
右方外部聯結或右方聯結
注意事項 Transact-SQL 支援完整外部聯結和完整聯結,但是該類型的聯結沒有上述語法。
如需詳細資訊,請參閱 Microsoft 網站上的這個網頁:使用外部聯結 (英文)。
隱藏警告的時機
您不應該隱藏這項警告。 已被取代的語法可能不適用於未來的 SQL Server 版本,因此您應該修正所有執行個體。
範例
六個範例示範下列選項:
範例 1 示範內部聯結的被取代語法。
範例 2 示範如何更新範例 1 以使用目前語法。
範例 3 示範左方外部聯結的被取代語法。
範例 4 示範如何更新範例 2 以使用目前語法。
範例 5 示範右方外部聯結的已取代語法。
範例 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]