现在 Mary 可以访问 TestData 数据库,你可能想要创建一些数据库对象,例如视图和存储过程,然后授予 Mary 访问它们的权限。 视图是存储的 SELECT 语句,而存储过程是以批处理方式执行的一条或多条 Transact-SQL 语句。
视图查询类似于表,不接受参数。 存储过程比视图更复杂。 存储过程可以同时具有输入参数和输出参数,并可以包括控制代码流的语句,如 IF 和 WHILE 语句。 将存储过程用于数据库中的所有重复操作,是一个良好的编程做法。
对于此示例,将使用 CREATE VIEW 创建一个视图,该视图仅选择 “产品 ”表中的两列。 然后,将使用 CREATE PROCEDURE 创建一个存储过程,该存储过程接受价格参数,并仅返回那些成本低于指定参数值的这些产品。
创建视图
执行以下语句以创建一个非常简单的视图,该视图执行 select 语句,并将产品的名称和价格返回给用户。
CREATE VIEW vw_Names AS SELECT ProductName, Price FROM Products; GO
测试视图
视图的处理方式与表类似。 使用
SELECT
语句访问视图。SELECT * FROM vw_Names; GO
创建存储过程
以下语句创建一个名为
pr_Names
的存储过程,接受名为@VarPrice
、数据类型为money
的输入参数。 该存储过程打印与输入参数(已从Products less than
数据类型更改为money
字符数据类型)串联的语句varchar(10)
。 然后,该存储过程对视图执行SELECT
语句,将输入参数作为WHERE
子句的一部分进行传递。 这将返回价格小于输入参数值的所有产品。CREATE PROCEDURE pr_Names @VarPrice money AS BEGIN -- The print statement returns text to the user PRINT 'Products less than ' + CAST(@VarPrice AS varchar(10)); -- A second statement starts here SELECT ProductName, Price FROM vw_Names WHERE Price < @varPrice; END GO
测试存储过程
若要测试存储过程,请键入并执行以下语句。 存储过程应该返回在第 1 课中向
Products
表中输入的、其价格小于10.00
的两个产品的名称。EXECUTE pr_Names 10.00; GO