7.创建索引
语法:
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX index_name
ON table_name(column_name[,column_name]...)
[WITH FILLFACTOR = x]
UNIQUE:是否是唯一索引
CLUSTERED:聚集索引
NONCLUSTERED:非聚集索引
WITH FILLFACTOR:1-100之间的值,表示索引页的填充因子
示例:
CREATE NONCLUSTERED INDEX ix_Storage_quantity
ON Storage(quantity) WITH FILLFACTOR = 30
3.创建和调用存储过程
创建|修改存储过程的基本语法:
CREATE|ALTER PROC[EDURE] procedure_name
[<@parameter_name data_type>[=default][output][,...n]]
AS
sql_statement
创建|修改存储过程的最复杂部分是生成内容(sql_statement部分),所有的智能都在这里
简单存储过程
--创建简单存储过程
CREATE PROCEDURE myProc1
AS
SELECT * FROM Students
--执行上述存储过程:
EXECUTE myProc1
带输入参数的存储过程
--创建带输入参数的存储过程
CREATE PROCEDURE myProc2
@Sid char(2)
AS
SELECT * FROM Students WHERE Sid=@Sid
--执行上述存储过程:
EXECUTE myProc2 '01'
带输入输出参数的存储过程
--创建带输入和输出参数的存储过程
CREATE PROCEDURE myProc3
@Uid char(2),@Pwd varchar(20),@Result char(4) output
AS
IF EXISTS(SELECT * FROM UserInfo WHERE Uid=@Uid AND Pwd=@Pwd)
SET @Result='合法'
ELSE
SET @Result='非法'
带返回值的存储过程
--创建有返回值的存储过程
CREATE PROCEDURE myProc4
@Uid char(2),@Pwd varchar(20)
AS
IF EXISTS(SELECT * FROM UserInfo WHERE Uid=@Uid AND Pwd=@Pwd)
RETURN 0
ELSE
RETURN 1
--执行上述存储过程
DECLARE @Result int
EXECUTE @Result=myProc4 '01','abc'
SELECT @Result
六.自定义函数
自定义函数类似存储过程,将一组SQL命令封装起来,区别在于自定义函数只能通过返回值的方式来返回结果。因此可以将自定义函数放置在任何SQL命令中。例如通过自定义函数进行复杂计算,然后将内容最为查询条件提供给查询语句。
语法:
CREATE|ALERT FUNCTION funName(@parament_name data_type,...n) returns data_type
AS
BEGIN
SQL命令
RETURN 值
END
创建一个函数的示例:
create FUNCTION GetName(@mID int) returns NVARCHAR(20)
AS
BEGIN
DECLARE @name(16);
select @name = name from tableName where id = @id
RETURN @name
END
七.游标
SQL中查询语句查询的结果是一个数据集,为了能够对数据集中的数据进行逐行计算,可以使用游标。不过要注意的是,游标的效率不高,所有只有在必要的时候才使用游标。
declare @fname varchar(20),@lname varchar(20)
--根据一个查询语句创建一个游标对象
declare myCursor cursor for
select fname,lname from employee
--打开游标
open myCursor
--通过游标逐行读取数据,并将读取的数据赋值给变量
fetch next from myCursor into @fname,@lname
--判断游标状态,是否存在下一行,如果有的话通过循环的方式读取每一条记录
while @@fetch_status = 0
begin
print @fname + '.' + @lname
fetch next from myCursor into @fname,@lname
end
--关闭游标
close myCursor
--释放游标对象
deallocate myCursor