简体   繁体   中英

SQL Store number of rows in a table

I want to know if it is possible to run a SQL query which returns the number of rows round in a table. I have a page which upon clicked, it will run sql queries which compares data between 2 tables, thus I will want the user to be notified if one or more table is empty.

SqlConnection thisConnection = new SqlConnection("Data Source=DATASOURCE");

    SqlCommand nonqueryCommand = thisConnection.CreateCommand();

    try
    {
        thisConnection.Open();
        //sql statement to check if a table is empty
        //stores the count value in a integer X

        if( X < 1 )
        {
        Response.Write("<script>alert('Database X is empty');</script>");
            return;
        }
     }

Qs: Do I use Select Count(*) from Table to retrieve the number of rows in a table?

How do I store the Count (*) value into an Integer?

Thank you in advance.


I am using SQL Server.

Try something like this:

public int CountRowsInTable()
{
   string stmt = "SELECT COUNT(*) FROM dbo.YourTable";
   int count = 0;

   using(SqlConnection thisConnection = new SqlConnection("Data Source=DATASOURCE"))
   using(SqlCommand cmdCount = new SqlCommand(stmt, thisConnection))
   {
       thisConnection.Open();
       count = (int)cmdCount.ExecuteScalar();
       thisConnection.Close();
   }

   return count;
}

Again: this works and gives you an accurate count - but it can be very very slow on large tables.

Alternatives:

  • peek into the system catalog views to get an approximate count (not accurate - but fast)
  • don't count - but just make sure you have at least one row (using SELECT TOP 1.... and making sure you get something back)

Update: to simply check whether a table contains any rows at all, you could use this TOP 1 approach which should be really fast - even for large tables:

public bool TableContainsAnyRows()
{
   // define a TOP 1 query - typically by the Primary Key of the table in question
   // using AdventureWorks sample database here
   string stmt = "SELECT TOP 1 [BusinessEntityID] FROM Person.Person ORDER BY [BusinessEntityID]";

   bool containsAnyRows = false;

   // open a connection and execute this query against the database 
   using(SqlConnection _con = new SqlConnection("server=.;database=AdventureWorks2008R2;integrated Security=SSPI;"))
   using(SqlCommand _cmd = new SqlCommand(stmt, _con))
   {
       _con.Open();

       // getting the result of the query
       // if the table contains *any* rows, the result will *NOT* be NULL
       object result = _cmd.ExecuteScalar();
       _con.Close();

       containsAnyRows = (result != null);
   }

   return containsAnyRows;
}
SELECT COUNT(*) FROM yourtable;

然后从结果中检索第一行。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM