SqlServer2008
1.前言
近來用SQLServer2008實現了單個存儲過程對一個表
的多個信息
的統計功能,感覺很有意思,特此整理成文。
2.前驅知識
SQLServer2008里面,可以直接用Select
將數據查詢
出來
比如說select '2016年11月15日22:53:58' 我的寫作時間
執行的結果為
執行查詢的結果
那么便可以利用這個特性,來統計一個表的多個信息
3.栗子一枚
3.1需求
用一個存儲過程統計男生的個數、女生的個數、一班人數、二班人數
3.2實現
為了簡化操作,假設學生信息表內只有學號,姓名,性別,班級號
3.2.1建表
CREATE TABLE Student (
ID nchar (10) NOT NULL,
name nchar (10) NOT NULL,
sex nchar (2) NOT NULL,
classid nchar (10) NOT NULL
)
3.2.2插入數據
INSERT INTO Student(ID,name,sex,classid) VALUES (N'001',N'張三',N'男',N'002')
INSERT INTO Student(ID,name,sex,classid) VALUES (N'2',N'李四',N'男',N'2')
INSERT INTO Student(ID,name,sex,classid) VALUES (N'3',N'李四',N'男',N'2')
INSERT INTO Student(ID,name,sex,classid) VALUES (N'4',N'李四',N'男',N'2')
INSERT INTO Student(ID,name,sex,classid) VALUES (N'5',N'希拉里',N'女',N'2')
INSERT INTO Student(ID,name,sex,classid) VALUES (N'6',N'希拉里',N'女',N'1')
INSERT INTO Student(ID,name,sex,classid) VALUES (N'7',N'林黛玉',N'女',N'1')
INSERT INTO Student(ID,name,sex,classid) VALUES (N'8',N'薛寶釵',N'女',N'1')
3.2.3創建存儲過程
-- =============================================
-- Author: <Stone6762>
-- Create date: <2016年11月15日22:48:56>
-- Description: <學生類的統計信息>
-- =============================================
CREATE PROCEDURE [dbo].[Select_Count_Student]
AS
BEGIN
select
(select count(ID) from student where sex='男') boyNumber,
(select count(ID) from student where sex='女') girlNumber,
(select count(ID) from student where classid=1) class1Number,
(select count(ID) from student where classid=2) class2Number;
END
3.2.4執行存儲過程
執行的結果
3.3程序調用(以C#調用為例)
public static void Select_Count_Student()
{
SqlConnection myConnection = new SqlConnection(@"server=;uid=;pwd=;database=;Trusted_Connection=no");
SqlCommand MyCommand = new SqlCommand("Select_Count_Student", myConnection); //定義一個數據庫操作指令
MyCommand.CommandType = CommandType.StoredProcedure;//設置該語句是讀取存儲過程的
SqlDataAdapter SelectAdapter = new SqlDataAdapter();//定義一個數據適配器
SelectAdapter.SelectCommand = MyCommand;//定義數據適配器的操作指令
try {
myConnection.Open();//打開數據庫連接
SelectAdapter.SelectCommand.ExecuteNonQuery();//執行數據庫查詢指令
myConnection.Close();//關閉數據庫
} catch (Exception e){
throw new Exception(e.ToString());
}
DataSet MyDataSet = new DataSet();//定義一個數據集
SelectAdapter.Fill(MyDataSet);//填充數據集
DataTable dt = MyDataSet.Tables[0];//獲取查詢的結果表(因為只有一個)
int boyNumber = (int)dt.Rows[0]["boyNumber"];
int girlNumber = (int)dt.Rows[0]["girlNumber"];
int Class1Number = (int)dt.Rows[0]["class1Number"];
int Class2Number = (int)dt.Rows[0]["class2Number"];
Console.WriteLine("男生人數:"+boyNumber);
Console.WriteLine("女生人數:" + girlNumber);
Console.WriteLine("一班人數:" + Class1Number);
Console.WriteLine("二班人數:" + Class2Number);
Console.ReadKey();
}