T-Sql
需要辨識 SQL 查詢中的所有表和列
當我們更新系統時,我有一項艱鉅的任務要遍歷數百個 SQL 腳本並辨識每個查詢中的表和列,並且某些列和表可能會被重命名或完全消失。
是否有任何人可以推薦的腳本產品允許我這樣做,考慮到使用的任何程序/腳本都需要考慮別名,並確保它可以區分選擇程式碼塊或聯合塊.
我有數百個查詢用於報告。我需要遍歷每個查詢並確定每個查詢中使用的表和列。
如果查詢在儲存過程中,或者您可以將它們作為儲存過程放入臨時數據庫,那麼系統 SP sp_depends和 相關目錄視圖將有所幫助。至少他們會縮小搜尋範圍。
如果查詢在文件中,那麼一點 Powershell 將立即生成 SP。
如果它們嵌入在應用程序中,或者,天哪,在執行應用程序回歸測試時動態生成,擷取送出的 SQL 並按上述方式進行操作可能會起作用。
我們在 .Net SQL 解析庫方面取得了成功。它的名字剛剛讓我想不起來。如果我找到它,我會將其編輯到這個答案中。當然,您仍然必須從應用程序中提取 SQL。
不是“準備使用”的解決方案,但可能是您需要的: http ://www.sqlparser.com
正如我在評論中解釋的那樣,這是一個框架,它還沒有準備好使用解決方案,但它有一組非常好的程式碼範例,以及現場展示。
USE [Audit] GO ALTER PROCEDURE [dbo].[ReportData3] -- Add the parameters for the stored procedure here @PERNR int, @PERID int, @SNAME int, @DateSt date, @DateFin date, @GROSS_PAY bit AS BEGIN SET NOCOUNT ON; IF @GROSS_PAY = 0 IF @PERNR IS NOT NULL SELECT PERNR, SNAME, WEEK_BEGIN_DATE, PERID, PLSTX, STLX, VDSK1_TEXT, HIRE_DATE, WEEK_ENDING_DATE, WOSTD, HR_REG, REG_PAY, HR_HOL, HOL_PAY, HR_VAC, VAC_PAY, HR_SIC, SIC_PAY, HR_OVT, OVT_PAY, HR_PRE, PRE_PAY, HR_OTH, OTH_PAY, HR_TOT_WORKED, HR_STR, STR_PAY, HR_TOT, TOT_PAY, Subtotal, RATR_OF_PAY_HORLY, RATR_OF_PAY_WEEKLY, GROSS_PAY, PAYDT, AVG_STRAIGHT, AVG_TOTAL, AVG_GROSS, RESULT, SEQNR, TERMDT FROM data_hist WHERE WEEK_ENDING_DATE >= @DateSt AND WEEK_ENDING_DATE <= @DateFin and
– 刪除了 118 行程式碼
解析結果:
Tables: data_hist Fields: data_hist.AVG_GROSS data_hist.AVG_STRAIGHT data_hist.AVG_TOTAL data_hist.GROSS_PAY data_hist.HIRE_DATE data_hist.HOL_PAY data_hist.HR_HOL data_hist.HR_OTH data_hist.HR_OVT data_hist.HR_PRE data_hist.HR_REG data_hist.HR_SIC data_hist.HR_STR data_hist.HR_TOT data_hist.HR_TOT_WORKED data_hist.HR_VAC data_hist.OTH_PAY data_hist.OVT_PAY data_hist.PAYDT data_hist.PERID data_hist.PERNR data_hist.PLSTX data_hist.PRE_PAY data_hist.RATR_OF_PAY_HORLY data_hist.RATR_OF_PAY_WEEKLY data_hist.REG_PAY data_hist.RESULT data_hist.SEQNR data_hist.SIC_PAY data_hist.SNAME data_hist.STLX data_hist.STR_PAY data_hist.Subtotal data_hist.TERMDT data_hist.TOT_PAY data_hist.VAC_PAY data_hist.VDSK1_TEXT data_hist.WEEK_BEGIN_DATE data_hist.WEEK_ENDING_DATE data_hist.WOSTD