IF EXISTS(SELECT * FROM sysobjects WHERE name = 'Test_Query' AND schema_name(uid) = 'A')
DROP PROCEDURE A.Test_Query;
GO
添加至存储过程的开头,即——你需要开始写一个名叫“A.Test_Query”的存储过程。
SET QUOTED_IDENTIFIER ON
SET ANSI_NULLS ON
GO
然后是衔接存储过程名字与内容的一段SQL语句。
这三句是SQL-92的设置语句,使SQL语句遵从SQL-92规则。
当以上内容中的 “SET QUOTED_IDENTIFIER” 为 "ON" 的属性时,标识符可以由双引号分隔,而文字则必须由单引号分隔。
当 “SET QUOTED_IDENTIFIER” 为 “OFF” 的属性时,标识符不可加引号。
标识符用于标识各种变量。
SET ANSI_NULLS ON表示当对“等于(=)”或“不等于(<>)”的空值(NULL)进行判断时,遵从 SQL-92 规则。
SQL-92规则中,在对“等于(=)”或“不等于(<>)”的空值(null)进行比较时,取值为false。
CREATE PROCEDURE A.Test_Query
@OwnerGUID VARCHAR(100),
@BeginTime VARCHAR(21),
@EndTime VARCHAR(21)
WITH ENCRYPTION
AS
SET NOCOUNT ON
CREATE PROCEDURE A.Test_Query表示你要创建一个角A.Test_Query的存储过程。
下面三个以“@”开头的是个人创建的变量,一般由外部传入。
WITH ENCRYPTION
AS
SET NOCOUNT ON
用于对存储过程的加密。
SELECT A.Name,
MAX(B.Name) AS BName,
COUNT(*) AS X,
SUM(CASE A.Grade WHEN NULL 0 ELSE 1 END) AS Y
SELECT你所需要SQL输出的数据,比如A表的Name。
MAX是返回指定列的最大值。
COUNT是获取你的行列计数,COUNT(*)是指所有行列的计数,"()"中用于添加条件。
SUM是求和,CASE等同于“C#”中的“Switch”语句,即多种选择。
本文中的代码CASE取A表的Grade属性进行筛选,当Grade属性为NULL时,CASE语句输出"0"而其他情况输出“1”。
CASE “列名” WHEN “条件” THEN“输出” ELSE“此外” END“结束”
再通过SUM()对CASE语句输出的数值进行总数相加计算。
FROM A.AStudent AS A INNER JOIN
B.BStudent AS B ON A.TeacherGUID = B.TercherGUID
FROM即数据的来源,以上代码使用了“INNER JOIN”(内联)的方法进行链接表格,AS用于将表格名称简化或者将数据名称进行简化。
在内联等链接中,需要添加ON及ON之后的条件,如上代码中的A表的TeacherGUID和B表的TeacherGUID属性一致的内容进行选出。
WHERE A.CreateDate > @BeginTime AND A.CreateDate < @EndTime
WHERE及挑选数据之后进行筛选的条件,上述代码中选择将FROM中获取数据以A表的CreateDate属性大于@BeginTime并且A表的CreateDate属性小于@EndTime的部分进行筛选。
GROUP BY A.CreateTime
GROUP BY用于对数据进行排序,本文使用A表的CreateTime属性对获取的数据进行排序。
RETURN @@ROWCOUNT
GO
RETURN @@ROWCOUNT用于返回上一语句执行后所收到的影响的行数,一般用于统计。