SNAHi建議在sql查詢找到未使用的表
任何人都請在sql中提出查詢來查找未使用的表。
我有一個遺留應用程序遷移從coldfusion.But大量的表格,以.NET是未使用現在
什麼是找到數據庫中所有未使用的對象的最佳方式。 (SQL 2005)
感謝 SNA
SNAHi建議在sql查詢找到未使用的表
任何人都請在sql中提出查詢來查找未使用的表。
我有一個遺留應用程序遷移從coldfusion.But大量的表格,以.NET是未使用現在
什麼是找到數據庫中所有未使用的對象的最佳方式。 (SQL 2005)
感謝 SNA
在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天左右,那麼你很確定你不再需要這張桌子了。
馬克
這裏是我寫找到沒有被任何存儲過程中的表.. 查詢..................... .................................................. ...............
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
- 查詢發現沒有被任何存儲過程,函數也不是鑑於 表 - 使用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
是傳說中的一個錯字嗎?你的意思是「傳統」應用程序... – Gishu 2009-06-04 06:29:32
抱歉遺產其錯別字 – SNA 2009-06-04 07:16:13