簡體   English   中英

如何轉換選擇查詢

[英]How to transform select query

我有DDL:

drop table names
drop table salary

create table names(
id int, 
name1 varchar(50),
char1 varchar(50),
char2 varchar(50))

insert into names values (1,'name1','char1','chara'),
                         (2,'name2','char2','charb'),
                         (3,'name3','char3','charc'),
                         (4,'name4','char4','chard'),
                         (5,'name5','char5','charf');

create table salary(
id int, 
salary int,
bonus int,
oldsalary int)

insert into salary values (1,500,245,354),
                         (2,600,345,246),
                         (3,60,365,334),
                         (4,55,545,364),
                         (5,25,345,374);

並擁有許多SQL查詢(其中之一)

    SELECT n.name1,
       s.salary,
       s.bonus,
       ( s.bonus + s.salary ) AS Sumsalary
FROM   names n
       INNER JOIN salary s
               ON n.id = s.id

我想寫一個select查詢,它從SQL查詢中使用的表中檢索所有字段名,除了此選擇查詢中的用法以及屏幕截圖中提到的一些其他信息。

我想從此查詢中檢索的數據格式 **在此處輸入圖像說明

如果您有權訪問系統視圖,則可以獲取查詢的表和列列表:

;WITH XMLNAMESPACES ('http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS ns)
SELECT DISTINCT st.TEXT AS QueryText, 
                C.value('./@Table', 'varchar(50)') As Tab,
                C.value('./@Column', 'varchar(50)') As Col
FROM sys.dm_exec_cached_plans AS cp
CROSS APPLY sys.dm_exec_query_plan(cp.plan_handle) AS qp
CROSS APPLY sys.dm_exec_sql_text(cp.plan_handle) AS st
CROSS APPLY query_plan.nodes('//ns:ColumnReference') as T(C)
WHERE cp.ObjType = 'Adhoc' AND
      St.Text Like '%s.bonus%' AND
      st.Text Not Like '%WITH XMLNAMESPACES%' AND 
      C.value('./@Table', 'varchar(50)') IS NOT NULL

這給出了以下結果:

QueryText            Tab       Col
SELECT n.name1, ...  [Names]   id
SELECT n.name1, ...  [Names]   name1
SELECT n.name1, ...  [Salary]  bonus
SELECT n.name1, ...  [Salary]  id
SELECT n.name1, ...  [Salary]  salary

然后,您可以使用這些結果作為鏈接到sys.columns的方法,以確定哪些coulmns丟失等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM