
SqlServer2008
1.前言
近來(lái)用SQLServer2008實(shí)現(xiàn)了單個(gè)存儲(chǔ)過(guò)程對(duì)一個(gè)表的多個(gè)信息的統(tǒng)計(jì)功能,感覺(jué)很有意思,特此整理成文。
2.前驅(qū)知識(shí)
SQLServer2008里面,可以直接用Select將數(shù)據(jù)查詢(xún)出來(lái)
比如說(shuō)select '2016年11月15日22:53:58' 我的寫(xiě)作時(shí)間
執(zhí)行的結(jié)果為

執(zhí)行查詢(xún)的結(jié)果
那么便可以利用這個(gè)特性,來(lái)統(tǒng)計(jì)一個(gè)表的多個(gè)信息
3.栗子一枚
3.1需求
用一個(gè)存儲(chǔ)過(guò)程統(tǒng)計(jì)男生的個(gè)數(shù)、女生的個(gè)數(shù)、一班人數(shù)、二班人數(shù)
3.2實(shí)現(xiàn)
為了簡(jiǎn)化操作,假設(shè)學(xué)生信息表內(nèi)只有學(xué)號(hào),姓名,性別,班級(jí)號(hào)
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插入數(shù)據(jù)
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創(chuàng)建存儲(chǔ)過(guò)程
-- =============================================
-- Author: <Stone6762>
-- Create date: <2016年11月15日22:48:56>
-- Description: <學(xué)生類(lèi)的統(tǒng)計(jì)信息>
-- =============================================
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執(zhí)行存儲(chǔ)過(guò)程

執(zhí)行的結(jié)果
3.3程序調(diào)用(以C#調(diào)用為例)
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); //定義一個(gè)數(shù)據(jù)庫(kù)操作指令
MyCommand.CommandType = CommandType.StoredProcedure;//設(shè)置該語(yǔ)句是讀取存儲(chǔ)過(guò)程的
SqlDataAdapter SelectAdapter = new SqlDataAdapter();//定義一個(gè)數(shù)據(jù)適配器
SelectAdapter.SelectCommand = MyCommand;//定義數(shù)據(jù)適配器的操作指令
try {
myConnection.Open();//打開(kāi)數(shù)據(jù)庫(kù)連接
SelectAdapter.SelectCommand.ExecuteNonQuery();//執(zhí)行數(shù)據(jù)庫(kù)查詢(xún)指令
myConnection.Close();//關(guān)閉數(shù)據(jù)庫(kù)
} catch (Exception e){
throw new Exception(e.ToString());
}
DataSet MyDataSet = new DataSet();//定義一個(gè)數(shù)據(jù)集
SelectAdapter.Fill(MyDataSet);//填充數(shù)據(jù)集
DataTable dt = MyDataSet.Tables[0];//獲取查詢(xún)的結(jié)果表(因?yàn)橹挥幸粋€(gè))
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("男生人數(shù):"+boyNumber);
Console.WriteLine("女生人數(shù):" + girlNumber);
Console.WriteLine("一班人數(shù):" + Class1Number);
Console.WriteLine("二班人數(shù):" + Class2Number);
Console.ReadKey();
}