• 存储过程中指定参数


    通过指定过程参数,调用程序可以将值传递给过程的主体。

    如果将参数标记为 OUTPUT 参数,则过程参数还可以将值返回给调用程序

    一个过程最多可以有 2100 个参数,每个参数都有名称、数据类型和方向。 还可以为参数指定默认值(可选)。

    将值传递给参数

     使用过程调用提供的参数值必须为常量或变量,不能将函数名称作为参数值。 变量可以是用户定义的变量或系统变量(如 @@spid)。

    下列示例演示如何将参数值传递给过程 uspGetWhereUsedProductID。 它们说明了如何将参数作为常量和变量进行传递,以及如何使用变量传递函数值。

    USE AdventureWorks2012;  
    GO  
    -- Passing values as constants.  传递常量
    EXEC dbo.uspGetWhereUsedProductID 819, '20050225';  
    GO  
    -- Passing values as variables.   传递变量
    DECLARE @ProductID int, @CheckDate datetime;  
    SET @ProductID = 819;  
    SET @CheckDate = '20050225';  
    EXEC dbo.uspGetWhereUsedProductID @ProductID, @CheckDate;  
    GO  
    -- Try to use a function as a parameter value.  
    -- This produces an error message.  传递函数,报错
    EXEC dbo.uspGetWhereUsedProductID 819, GETDATE();  
    GO  
    -- Passing the function value as a variable.  
    DECLARE @CheckDate datetime;  
    SET @CheckDate = GETDATE();  
    EXEC dbo.uspGetWhereUsedProductID 819, @CheckDate;  
    GO

    在存储过程中定义参数

    1.需要指定参数名称

    2.指定参数数据类型

    3.可以指定参数默认值

    4.可以指定参数方式(默认为输入参数)

    示例1:

    USE AdventureWorks2012;  
    GO  
    IF OBJECT_ID('Sales.uspGetSalesYTD', 'P') IS NOT NULL  
        DROP PROCEDURE Sales.uspGetSalesYTD;  
    GO  
    CREATE PROCEDURE Sales.uspGetSalesYTD  
    @SalesPerson nvarchar(50) = NULL  -- NULL default value  
    AS   
        SET NOCOUNT ON;   
      
    -- Validate the @SalesPerson parameter.  
    IF @SalesPerson IS NULL  
    BEGIN  
       PRINT 'ERROR: You must specify the last name of the sales person.'  
       RETURN  
    END  
    -- Get the sales for the specified sales person and   
    -- assign it to the output parameter.  
    SELECT SalesYTD  
    FROM Sales.SalesPerson AS sp  
    JOIN HumanResources.vEmployee AS e ON e.BusinessEntityID = sp.BusinessEntityID  
    WHERE LastName = @SalesPerson;  
    RETURN  
    GO

    运行如下

    -- Run the procedure without specifying an input value.  
    EXEC Sales.uspGetSalesYTD;  
    GO  
    -- Run the procedure with an input value.  
    EXEC Sales.uspGetSalesYTD N'Blythe';  
    GO

     

    示例2:

    USE AdventureWorks2012;  
    GO  
    IF OBJECT_ID ( 'Production.uspGetList', 'P' ) IS NOT NULL   
        DROP PROCEDURE Production.uspGetList;  
    GO  
    CREATE PROCEDURE Production.uspGetList @Product varchar(40)   
        , @MaxPrice money   
        , @ComparePrice money OUTPUT  
        , @ListPrice money OUT  
    AS  
        SET NOCOUNT ON;  
        SELECT p.[Name] AS Product, p.ListPrice AS 'List Price'  
        FROM Production.Product AS p  
        JOIN Production.ProductSubcategory AS s   
          ON p.ProductSubcategoryID = s.ProductSubcategoryID  
        WHERE s.[Name] LIKE @Product AND p.ListPrice < @MaxPrice;  
    -- Populate the output variable @ListPprice.  
    SET @ListPrice = (SELECT MAX(p.ListPrice)  
            FROM Production.Product AS p  
            JOIN  Production.ProductSubcategory AS s   
              ON p.ProductSubcategoryID = s.ProductSubcategoryID  
            WHERE s.[Name] LIKE @Product AND p.ListPrice < @MaxPrice);  
    -- Populate the output variable @compareprice.  
    SET @ComparePrice = @MaxPrice;  
    GO

    运行如下脚本

    DECLARE @ComparePrice money, @Cost money ;  
    EXECUTE Production.uspGetList '%Bikes%', 700,   
        @ComparePrice OUT,   
        @Cost OUTPUT  
    print 'Cost'+RTRIM(CAST(@Cost AS varchar(20)))
    print 'ComparePrice'+RTRIM(CAST(@ComparePrice AS varchar(20)))
    IF @Cost <= @ComparePrice   
    BEGIN  
        PRINT 'These products can be purchased for less than   
        $'+RTRIM(CAST(@ComparePrice AS varchar(20)))+'.'  
    END  
    ELSE  
        PRINT 'The prices for all products in this category exceed   
        $'+ RTRIM(CAST(@ComparePrice AS varchar(20)))+'.';

    效果

     

  • 相关阅读:
    第五十天 how can I 坚持
    第四十九天 how can I 坚持
    第四十八天 how can I 坚持
    第四十七t天 how can i 坚持
    第四十六天 how can i 坚持
    第四十四天 hao can I 坚持
    第四十二天 how can I 坚持
    rails 中 create, new, build, save 的用法以及误区汇总
    Linux Shell脚本编程--sed命令详解
    【C#编程基础学习笔记】4---Convert类型转换
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/12616526.html
Copyright © 2020-2023  润新知