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) create table tablespace declare @sql varchar(500) declare cursor1 cursor open cursor1 while @@fetch_status = 0
--查看庫的使用狀況,可以隨時執行的。 |
····
高級功能: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] '想要查找的值'
```