T-Sql

需要辨識 SQL 查詢中的所有表和列

  • November 13, 2019

當我們更新系統時,我有一項艱鉅的任務要遍歷數百個 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

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