SQL Server 得到数据库中所有表的名称及数据条数

提到单个表的数据条数,大家都会想到 select count(*) from tablename

如果是要得到数据库中所有表的条数呢?我们来看几种最常见的方式:

--方法一
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


--方法二
select  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 
        
--建议使用后两种方式,对于SQL SERVER 2005来说,三种方法都好使,如果是其他板本,可以逐一测试一下。



  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要获SQL Server数据库所有数据并保存在本地,可以使用以下步骤: 1. 安装 SQL Server Native Client 或者 ODBC 驱动程序,以便连接 SQL Server 数据库。 2. 使用 SQL Server Management Studio 或者其他工具创建一个连接,并测试连接是否正常。 3. 使用 C++ 编写代码连接到 SQL Server 数据库,并执行查询。 4. 查询所有名称,并将结果保存在一个字符串数组。 5. 迭代该数组的每个,并为每个生成一个 SELECT 语句。 6. 使用 SQL Server 数据库驱动程序执行每个 SELECT 语句,并将结果保存在一个文件。 以下是一个示例代码: ```c++ #include <windows.h> #include <sqltypes.h> #include <sql.h> #include <sqlext.h> #include <iostream> #include <fstream> #include <string> using namespace std; // 定义 SQL Server 数据库连接参数 #define SQLSERVER_DRIVER "{SQL Server Native Client 11.0}" #define SQLSERVER_SERVER "localhost" #define SQLSERVER_DATABASE "test" #define SQLSERVER_USER "username" #define SQLSERVER_PASSWORD "password" // 定义 SQL 查询语句 #define SELECT_TABLES "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'" int main() { // 声明 SQL Server 数据库连接句柄和语句句柄 SQLHENV hEnv = NULL; SQLHDBC hDbc = NULL; SQLHSTMT hStmt = NULL; // 初始化 SQL Server 数据库连接句柄 SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hEnv); SQLSetEnvAttr(hEnv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0); SQLAllocHandle(SQL_HANDLE_DBC, hEnv, &hDbc); // 连接 SQL Server 数据库 SQLCHAR* szConnStr = (SQLCHAR*)"DRIVER=" SQLSERVER_DRIVER ";SERVER=" SQLSERVER_SERVER ";DATABASE=" SQLSERVER_DATABASE ";UID=" SQLSERVER_USER ";PWD=" SQLSERVER_PASSWORD; SQLRETURN ret = SQLDriverConnect(hDbc, NULL, szConnStr, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_NOPROMPT); if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { cerr << "Failed to connect to SQL Server database." << endl; return -1; } // 执行查询语句,获所有名称 SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt); ret = SQLExecDirect(hStmt, (SQLCHAR*)SELECT_TABLES, SQL_NTS); if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { cerr << "Failed to execute SQL query." << endl; return -1; } // 保存名称 SQLCHAR szTableName[256]; SQLLEN cbTableName; string arrTables[256]; int i = 0; while (SQLFetch(hStmt) == SQL_SUCCESS) { SQLGetData(hStmt, 1, SQL_C_CHAR, szTableName, sizeof(szTableName), &cbTableName); arrTables[i++] = (char*)szTableName; } // 迭代每个,生成 SELECT 语句,并执行查询 SQLCHAR szSelect[1024]; SQLLEN cbSelect; ofstream outfile; for (int j = 0; j < i; j++) { sprintf((char*)szSelect, "SELECT * FROM %s", arrTables[j].c_str()); ret = SQLExecDirect(hStmt, szSelect, SQL_NTS); if (SQL_SUCCESS != ret && SQL_SUCCESS_WITH_INFO != ret) { cerr << "Failed to execute SQL query." << endl; return -1; } // 将查询结果保存在文件 outfile.open(arrTables[j].c_str()); SQLCHAR szData[4096]; SQLLEN cbData; while (SQLFetch(hStmt) == SQL_SUCCESS) { for (int k = 1; k <= i; k++) { SQLGetData(hStmt, k, SQL_C_CHAR, szData, sizeof(szData), &cbData); outfile << (char*)szData << ","; } outfile << endl; } outfile.close(); } // 释放句柄 SQLFreeHandle(SQL_HANDLE_STMT, hStmt); SQLDisconnect(hDbc); SQLFreeHandle(SQL_HANDLE_DBC, hDbc); SQLFreeHandle(SQL_HANDLE_ENV, hEnv); return 0; } ``` 这段代码连接到 SQL Server 数据库,执行 SELECT_TABLES 查询获所有名称,然后迭代名称,并为每个生成 SELECT 语句,并将结果保存在一个文件。你可以根据自己的需要修改代码来实现你的具体需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值