Sql-Server

在處於 2000 (80) 兼容模式的數據庫上辨識 SQL Server 2008 R2 中的非 ANSI 聯接

  • February 12, 2013

我們有一個非常古老的數據庫在 SQL Server 2008 R2 上執行。該數據庫在 2000 (80) 兼容模式下執行,並且在儲存過程、視圖和函式中有大量非 ANSI 連接。

我們需要將此數據庫更新到至少 2005 兼容模式以啟用 CTE SQL 的使用,ROW_NUMBER OVER (PARTITION BY)等等。

當我們第一次升級到 SQL Server 2008 R2 時,我們顯然首先執行了 Upgrade Advisor 2008 R2,它突出顯示了所有具有非 ansi 連接的 SQL,當時我們只是忽略了它們並將數據庫置於 SQL Server 2000 (80) 兼容模式。

我們現在的問題是 SQL Server 2008 R2 升級顧問將不再為我們工作,因為該版本不受支持(因為我們已經在使用該版本),並且 2012 升級顧問不支持 2000 (80) 數據庫任何一個。

我的問題是,沒有編寫整個數據庫的腳本並煞費苦心地檢查*=等等=**=*是否有一種工具可以用來檢測所有包含這些連接的過程、視圖和函式,以便我們可以重新編寫它們。

這可能會產生一些誤報(例如,您可能有*=評論),但應該是一個好的開始:

SELECT 
 obj = QUOTENAME(SCHEMA_NAME(o.[object_id]))
     + '.' + QUOTENAME(o.name),
 o.type_desc
FROM sys.sql_modules AS m
INNER JOIN sys.objects AS o
ON m.[object_id] = o.[object_id]
WHERE m.definition LIKE '%=*%'
OR m.definition LIKE '%*=%';

syscomments兼容性視圖包含所有儲存過程、觸發器、函式和類似對象的程式碼副本。您可以使用“LIKE”標準輕鬆搜尋它以查找需要更新的對象 ID 列表。

引用自:https://dba.stackexchange.com/questions/34597