2009-06-04 32 views
0

SNAHi建議在sql查詢找到未使用的表

任何人都請在sql中提出查詢來查找未使用的表。

我有一個遺留應用程序遷移從coldfusion.But大量的表格,以.NET是未使用現在

什麼是找到數據庫中所有未使用的對象的最佳方式。 (SQL 2005)

感謝 SNA

+0

是傳說中的一個錯字嗎?你的意思是「傳統」應用程序... – Gishu 2009-06-04 06:29:32

+0

抱歉遺產其錯別字 – SNA 2009-06-04 07:16:13

回答

3

在SQL Server中,acutal表數據IS聚集索引。在SQL Server 2005及更高版本的動態管理視圖(DMV)上使用此查詢,您可以找到未使用的索引 - 如果您發現任何聚集索引(index_id = 1)在一段延長的時間內未被使用,則該表未被使用了:

DECLARE @dbid INT 
SELECT @dbid = DB_ID(DB_NAME()) 

SELECT 
    OBJECTNAME = OBJECT_NAME(I.OBJECT_ID), 
    INDEXNAME = I.NAME, 
    I.INDEX_ID 
FROM  
    SYS.INDEXES I 
JOIN 
    SYS.OBJECTS O ON I.OBJECT_ID = O.OBJECT_ID 
WHERE  
    OBJECTPROPERTY(O.OBJECT_ID, 'IsUserTable') = 1 
    AND I.INDEX_ID NOT IN 
     (SELECT S.INDEX_ID 
     FROM SYS.DM_DB_INDEX_USAGE_STATS S 
     WHERE S.OBJECT_ID = I.OBJECT_ID 
       AND I.INDEX_ID = S.INDEX_ID 
       AND DATABASE_ID = @dbid) 
ORDER BY 
    OBJECTNAME, 
    I.INDEX_ID, 
    INDEXNAME ASC 

另一種選擇是,如果你懷疑它沒有被用來臨時重命名錶,然後看看你的應用程序(S)仍正常工作。如果他們爲例如30天左右,那麼你很確定你不再需要這張桌子了。

馬克

0

這裏是我寫找到沒有被任何存儲過程中的表.. 查詢..................... .................................................. ...............

Declare @tablename nvarchar(40) 
Declare tablecursor cursor for 
    Select name from sysobjects where xtype = 'U' 
DECLARE @sqlCommand nvarchar(1000) 
declare @rowCount int 
DECLARE @searchstring varchar(50) 
DECLARE @ParmDefinition nvarchar(500); 

create table #temp 
(
    UnusedTables nvarchar(40) 
) 

open tablecursor 
fetch next from tablecursor into @tablename 
while @@fetch_status = 0 
begin    
    set @searchstring='p' 
    SET @sqlCommand = N'SELECT @rows = count(o.name) from sysobjects o , 
    syscomments c where o.type='+char(39)[email protected] + char(39)+' and 
    o.id=c.id and c.text like '+ char(39)+'%' + @tablename +'%'+char(39); 
    SET @ParmDefinition = N'@rows int OUTPUT';    

    EXECUTE sp_executesql @sqlCommand, @ParmDefinition,@[email protected] OUTPUT; 

    if @rowCount = 0 
    begin 
     insert into #temp values (@tablename)      
    end 

    fetch next from tablecursor into @tablename 
end 

close tablecursor 
deallocate tablecursor 
select UnusedTables from #temp 
drop table #temp 

感謝 SA

1

- 查詢發現沒有被任何存儲過程,函數也不是鑑於 表 - 使用SQL 2005系統表,所有的程序對象依賴關係和&只查詢:

select tables.name, progr.name 
from sys.objects tables (nolock) 
    left join sys.syscomments comm (nolock) on comm.text like '%' + tables.name +'%' 
    left join sys.objects progr (nolock) on progr.object_id = comm.id and progr.type in ('P', 'FN', 'TR', 'V') 
where tables.type = 'U' 
    and comm.id is null