SqlServer數據庫中表結構最后更新時間


 

SqlServer數據庫中表結構最后更新時間

 

``

Sql Server查詢數據的所有表名和行數及空間占用量

 
//查詢所有表名 
select name from sysobjects where xtype='u' 
 --modify_date指表結構最后更新日期,並非數據最后更新日期

 

//查詢所有表名及統計信息(表結構創建及最后修改時間)
SELECT     name, object_id, principal_id, schema_id, parent_object_id, type, type_desc, create_date, modify_date, is_ms_shipped, is_published, 
                      is_schema_published, lob_data_space_id, filestream_data_space_id, max_column_id_used, lock_on_bulk_load, uses_ansi_nulls, is_replicated, 
                      has_replication_filter, is_merge_published, is_sync_tran_subscribed, has_unchecked_assembly_data, text_in_row_limit, 
                      large_value_types_out_of_row
FROM         sys.tables ORDER BY modify_date DESC


//查詢數據庫中所有的表名及行數
SELECT     a.name, b.rows
FROM         sys.sysobjects AS a INNER JOIN
                      sys.sysindexes AS b ON a.id = b.id
WHERE     (b.indid IN (0, 1)) AND (a.type = 'u')
ORDER BY a.name, b.rows DESC



//查詢所有的標明及空間占用量\行數
SELECT     OBJECT_NAME(id) AS tablename, 8 * reserved / 1024 AS reserved, RTRIM(8 * dpages) + 'kb' AS used, 8 * (reserved - dpages) / 1024 AS unused, 
                      8 * dpages / 1024 - rows / 1024 * minlen / 1024 AS free
FROM         sys.sysindexes
WHERE     (indid = 1)
ORDER BY tablename, reserved DESC

 

//查詢數據庫中的所有數據庫名
SELECT Name FROM Master..SysDatabases ORDER BY Name

 

//查詢某個數據庫中所有的表名
SELECT Name FROM SysObjects Where XType='U' ORDER BY Name

 

//獲取一個數據庫中的所有表的名稱、一個表中所有字段的名稱

//獲取一個數據庫中的所有表的名稱、一個表中所有字段的名稱
SELECT (case when a.colorder=1 then d.name else null end) 表名,  
a.colorder 字段序號,a.name 字段名,
(case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then ''else '' end) 標識, 
(case when (SELECT count(*) FROM sysobjects  
WHERE (name in (SELECT name FROM sysindexes  
WHERE (id = a.id) AND (indid in  
(SELECT indid FROM sysindexkeys  
WHERE (id = a.id) AND (colid in  
(SELECT colid FROM syscolumns WHERE (id = a.id) AND (name = a.name)))))))  
AND (xtype = 'PK'))>0 then '' else '' end) 主鍵,b.name 類型,a.length 占用字節數,  
COLUMNPROPERTY(a.id,a.name,'PRECISION') as 長度,  
isnull(COLUMNPROPERTY(a.id,a.name,'Scale'),0) as 小數位數,(case when a.isnullable=1 then ''else '' end) 允許空,  
isnull(e.text,'') 默認值,isnull(g.[value], ' ') AS [說明]
FROM  syscolumns a 
left join systypes b on a.xtype=b.xusertype  
inner join sysobjects d on a.id=d.id and d.xtype='U' and d.name<>'dtproperties' 
left join syscomments e on a.cdefault=e.id  
left join sys.extended_properties g on a.id=g.major_id AND a.colid=g.minor_id
left join sys.extended_properties f on d.id=f.class and f.minor_id=0
where b.name is not null
--WHERE d.name='[要查詢的表]' --如果只查詢指定表,加上此條件
order by a.id,a.colorder

 

 SQLSERVER數據庫中查看過去一個月之內執行過的update 語句

--SQLSERVER數據庫中如何查看過去一個月之內執行過的update語句
SELECT d.plan_handle , d.sql_handle , e.text FROM sys.dm_exec_query_stats d CROSS APPLY sys.dm_exec_sql_text(d.plan_handle) AS e

 

 

SqlServer查詢數據庫中每張表的數據量

在數據庫量過大的時候,會查詢數據庫表的數據量,看看是否需要分表使用。如何查詢一個數據庫中所有的表及表的數據量呢?

SELECT a.name TableName,b.rows TableCount FROM sysobjects a   INNER JOIN    sysindexes b ON a.id=b.id  WHERE b.indid IN(0,1) AND a.Type='U'  and a.name not in ('')  ORDER BY TableCount DESC

 

這樣一段sql就可以查出數據庫中每張表的數據量,如圖:

 

擴展:

 

有的時間我想把數據庫中表的記錄統計一下,如果我們一個一個表的操作可以直接select count(*) from tablename就可以然后一個個相加,但是如果有上百個表有沒有更簡單的方法呢,下面我總結了一些方法有需要的朋友可參考。

 

如果是要得到中所有表的條數呢?我們來看幾種最常見的方式:

--方法一

代碼如下  

b.name as tablename ,

c.row_count as datacount

from sys.indexes a ,

sys.objects b ,

sys.dm_db_partition_stats c

where a.[object_id] = b.[object_id]

AND b.[object_id] = c.[object_id]

AND a.index_id = c.index_id

AND a.index_id < 2

AND b.is_ms_shipped = 0


--方法二

代碼如下  

select b.name as tablename ,

a.rowcnt as datacount

from sysindexes a ,

sysobjects b

where a.id = b.id

and a.indid < 2

and objectproperty(b.id, 'IsMSShipped') = 0


--方法三

代碼如下  
if exists ( select *
from dbo.sysobjects
where id = object_id(N'[dbo].[TableSpace]')
and objectproperty(id, N'IsUserTable') = 1 ) 
drop table [dbo].[TableSpace]
go
create table TableSpace
(
TableName varchar(20) ,
RowsCount char(11) ,
Reserved varchar(18) ,
Data varchar(18) ,
Index_size varchar(18) ,
Unused varchar(18)
)
go
declare @sql varchar(500)
declare @TableName varchar(20)
declare mCursor cursor
for
select name from sysobjects where xtype='U'
open mCursor
fetch NEXT from mCursor into @TableName
while @@fetch_status = 0 
begin
set @sql = 'insert into TableSpace '
set @sql = @sql + ' exec sp_spaceused ''' + @TableName + ''' '
exec (@sql)
fetch NEXT from mCursor into @TableName
end
close mCursor
deallocate mCursor
go
--顯示結果
select TableName,RowsCount from TableSpace


--建議使用后兩種方式,對於SQL SERVER 2005來說,三種方法都好使,如果是其他板本,可以逐一測試一下。


方法四

--==========================================================================
-- 說明: 本腳本用於查詢當前中所有表格的記錄條數
-- 並將結果存入tableinfo表中,不會刪除以備用戶再做處理與分析
-- 不過,最后請用戶刪除此表。
--==========================================================================

 

代碼如下  

if exists (select * from dbo.sysobjects where id = object_id(n[dbo].[tablespace]) and objectproperty(id, nisusertable) = 1)
drop table [dbo].[tablespace]
go

create table tablespace
(
tablename varchar(20),
rowscount char(11),
reserved varchar(18),
data varchar(18),
index_size varchar(18),
unused varchar(18) 
)
go

declare @sql varchar(500)
declare @tablename varchar(20)

declare cursor1 cursor
for 
select name from sysobjects where xtype=u

open cursor1
fetch next from cursor1 into @tablename

while @@fetch_status = 0
begin
set @sql = insert into tablespace 
set @sql = @sql + exec sp_spaceused + @tablename + 
exec (@sql)
fetch next from cursor1 into @tablename
end
close cursor1
deallocate cursor1
go


--顯示結果
select * from tablespace
--order by tablename
--order by tablename asc --按表名稱,用於統計表
--order by rowscount desc --按行數量,用於查看表行數
--order by reserved desc, data desc --按占用空間
--order by index_size desc, reserved desc --按索引空間查看
go

--查看庫的使用狀況,可以隨時執行的。
--exec sp_spaceused
--go

 

 ····

 

 

高級功能:SQL Server查詢整個數據庫中某個特定值所在的表和字段的方法

 

--SQL SERVER查詢整個數據庫中某個特定值所在的表和字段
CREATE  PROCEDURE  [dbo].[SP_FindValueInDB]
(
     @value  VARCHAR (1024)
) 
AS
BEGIN
     SET  NOCOUNT  ON ;
     DECLARE  @sql  VARCHAR (1024) 
     DECLARE  @table  VARCHAR (64) 
     DECLARE  @column  VARCHAR (64) 
     CREATE  TABLE  #t ( 
         tablename  VARCHAR (64), 
         columnname  VARCHAR (64) 
     ) 
     DECLARE  TABLES  CURSOR  FOR 
     SELECT  o. name , c. name  FROM  syscolumns c 
     INNER  JOIN  sysobjects o  ON  c.id = o.id 
     WHERE  o.type =  'U'  AND  c.xtype  IN  (167, 175, 231, 239) 
     ORDER  BY  o. name , c. name 
     OPEN  TABLES 
         FETCH  NEXT  FROM  TABLES 
         INTO  @table , @column 
         WHILE @@FETCH_STATUS = 0 
         BEGIN 
             SET  @sql =  'IF EXISTS(SELECT NULL FROM ['  +@table+  '] ' 
             SET  @sql = @sql +  ' WHERE RTRIM(LTRIM(['  +@column+  '])) LIKE ''%'  +@value+  '%'') ' 
             SET  @sql = @sql +  ' INSERT INTO #t VALUES ('''  +@table+  ''',''' 
             SET  @sql = @sql + @column  +  ' '') ' 
             EXEC (@sql) 
             FETCH  NEXT  FROM  TABLES 
             INTO  @table , @column 
         END 
     CLOSE  TABLES 
     DEALLOCATE  TABLES 
     SELECT  *  FROM  #t 
     DROP  TABLE  #t 
End

 

--只需要傳入一個想要查找的值,即可查詢出這個值所在的表和字段名。
exec  dbo.[SP_FindValueInDB] '想要查找的值'

 

 

  

 

 

 

 

 

 

```


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM