2017-04-26 71 views
0

我有一個表有50多列,但只有少數列正在使用。這意味着當任何存儲過程使用該表時,它僅在select/where語句中引用4-5列。其餘的列沒有被使用。我只想列出實際使用的那些列。一種方法是找出表的依賴關係,然後遍歷每個SP並找出哪些列正在使用。但在那種情況下,我有大約30+ Sp。有沒有有效的方法來做到這一點。找出sql服務器中的表中所有有用的列

+0

我會在字典中尋找它,不記得...列使用(四)的東西。 – jarlh

+0

通過表中有用的列我的意思是一些存儲過程引用這些列。如果在我的數據庫中沒有sp引用表中的特定列,那麼該列對我沒有用處。 – pKay

回答

2

試試這個:

select name from syscomments c 
join sysobjects o on c.id = o.id 
where TEXT like '%table_name%' and TEXT like '%column_name%' 

table_name中給你的表名,在列名給出了要CHCK程序dependencies.You將獲得該存儲過程的名稱作爲輸出列

+0

非常感謝。這會做。 – pKay

3

要使用多個列在一個過程中,你可以使用一個代碼像下面

create procedure sp_sample 
@column_names varchar(200) 
as 
if @column_names='' or @column_nams is null 
    set @column_names='*' 

exec ('select '[email protected]_name +' from table') 

下面是一些例子:

exec sp_sample @columnname='id,name' 

exec sp_sample @columnname='id,name,telphone' 
0

如果您導入數據庫使用SQL Server Data Tools數據庫項目,你將能夠找到一個表或使用「查找所有引用」上下文命令列的所有引用。是什麼使得這個特別有用的是準確性:它甚至會發現SELECT *的實例沒有明確提及該列,但隱式地參考它。它也不會被具有類似名稱的表或列混淆(發現ID的特定實例在其他方面存在問題)。

如果你想知道某個列是否被引用,你可以簡單地刪除它,看看是否有任何「未解決的引用」錯誤出現在錯誤列表中 - 如果是的話,那麼該列在某處使用。

相關問題