sql server 获取数据库中的表命令
时间: 2024-09-13 08:04:13 浏览: 30
在SQL Server中,获取数据库中的所有表通常使用`sys.objects`系统视图。你可以通过查询这个视图来列出所有的存储过程、函数、触发器等,以及基本的用户定义表(如用户创建的表)。以下是基本的SQL查询语句:
```sql
SELECT name AS TableName
FROM sys.objects
WHERE type = 'u' -- 'u'代表用户定义的对象类型,包括表
AND object_id NOT IN (
-- 如果你不想显示特定类型的系统表,可以添加排除条件
SELECT object_id FROM sys.objects WHERE name LIKE '%temp%' OR name LIKE '%sys%'
)
ORDER BY name;
```
这条命令会返回指定数据库中所有非临时表的名称,按字母顺序排序。如果你想查看所有表的信息,还可以加上其他列,例如:
```sql
SELECT name AS TableName, type_desc, create_date
FROM sys.objects
WHERE type = 'u'
...
```
这将包含表名、对象类型描述以及创建日期。
相关问题
sqlserver 查询数据库死锁表语句
在SQL Server中,查询数据库死锁信息通常涉及到系统表`sys.dm_tran_locks`和`sys.dm_os_waiting_tasks`。你可以通过以下几个步骤来获取死锁信息:
1. **使用`sys.dm_tran_locks`**:
```sql
SELECT
request_session_id AS 'Session ID',
request_mode AS 'Lock Type',
request_status AS 'Status (WAITING / OWM)',
object_name(resource_database_id, lock_object_address) AS 'Locked Object',
row_count(*) AS 'Rows Affected'
FROM
sys.dm_tran_locks
WHERE
is_rowlock = 1 AND lock_status = 'deadlock';
```
这将返回当前有死锁请求的会话ID、锁定类型、状态以及锁定的对象。
2. **结合`sys.dm_os_waiting_tasks`**:
```sql
SELECT
t1.session_id,
t1.request_mode,
t1.resource_db_id,
t1.resource_transaction_log_sequence AS 'Transaction Sequence',
t1.resource_database_name AS 'Database Name',
t2.object_name AS 'Deadlocked On',
t2.lock_type
FROM
sys.dm_tran_locks t1
INNER JOIN
sys.dm_tran_locks t2 ON t1.holding_session_id = t2.request_session_id
WHERE
t1.is_rowlock = 1 AND t1.lock_status = 'deadlock' AND t2.lock_status = 'wait';
```
这个查询还会显示出导致死锁的另一个事务的信息。
3. **使用`DBCC OPENTRAN`和`KILL`命令**:
如果你需要立即释放死锁,可以先查看哪些事务参与了死锁,然后用`DBCC OPENTRAN`检查事务,并使用`KILL`命令结束它们:
```sql
DBCC OPENTRAN;
KILL <transaction_id>;
```
请务必谨慎操作,因为`KILL`可能会导致数据丢失。
sqlserver查看数据库各个表占用大小
要查看SQL Server数据库中各个表的大小,可以使用以下方法。
方法一:使用系统存储过程
1. 打开SQL Server Management Studio (SSMS),连接到目标数据库。
2. 在查询窗口中运行以下命令:
```
EXEC sp_MSforeachtable 'EXEC sp_spaceused ''?'''
```
该命令会运行系统存储过程`sp_spaceused`,并对每个表执行该存储过程。执行完毕后,会显示每个表的大小信息,包括表名、行数、已分配空间、未使用空间等。
方法二:使用动态管理视图
1. 打开SQL Server Management Studio (SSMS),连接到目标数据库。
2. 在查询窗口中运行以下命令:
```
SELECT
t.NAME AS TableName,
s.Name AS SchemaName,
p.rows AS RowCounts,
SUM(a.total_pages) * 8 AS TotalSpaceKB,
SUM(a.used_pages) * 8 AS UsedSpaceKB,
(SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN
sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
INNER JOIN
sys.allocation_units a ON p.partition_id = a.container_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
WHERE
t.NAME NOT LIKE 'dt%'
AND t.is_ms_shipped = 0
AND i.OBJECT_ID > 255
GROUP BY
t.Name, s.Name, p.Rows
ORDER BY
TotalSpaceKB DESC
```
该命令会查询系统的动态管理视图以获取每个表的大小信息。执行完毕后,会按照表的总空间大小进行排序,并显示表名、架构名、行数、总空间、已使用空间和未使用空间等信息。
无论是使用系统存储过程还是动态管理视图,都可以方便地查看SQL Server数据库中各个表的占用大小信息,以便进行存储空间管理和性能优化。