Procedures e consultas usando o Sql Server 2000/2005

USE Northwind
DECLARE @retCode int
DECLARE @custID nchar(5), @empID int
DECLARE @orderDate datetime, @shipperID int
DECLARE @Details varchar(1000)

SET @shipperID=2
SET @custID='SAVEA'
SET @empID=4
SET @orderDate = '2/3/2002'
SET @Details="32    10    0.25  47    8     0.20"
SET @Details=@Details + "   75     5    0.05  76    15    0.10"
EXECUTE @retCode = NewOrder @custID, @empID, @orderDate,
                            @shipperID, @Details
PRINT @retCode

------------------------------------------------------------------------------------------------------------------------

USE NORTHWIND
IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AddCustomer')
    DROP PROCEDURE AddCustomer
GO

CREATE PROCEDURE AddCustomer
      @custID nchar(5), @custName nvarchar(40),
      @custContact nvarchar(30), @custTitle nvarchar(30),
      @custAddress nvarchar(60), @custcity nvarchar(15),
      @custRegion nvarchar(15), @custPostalCode nvarchar(10),
      @custCountry nvarchar(15),
      @custPhone nvarchar(24), @custFax nvarchar(24)
AS
DECLARE @ErrorCode int
INSERT Customers (CustomerID, CompanyName, ContactName,
                  ContactTitle, Address, City, Region,
                  PostalCode, Country, Phone, Fax)
VALUES (@custID, @custName, @custContact,
        @custTitle, @custAddress,
        @custCity, @custRegion, @custPostalCode, @custCountry,
        @custPhone, @custFax)
SET @ErrorCode=@@ERROR
IF (@ErrorCode = 0)
   RETURN (0)
ELSE
   RETURN (@ErrorCode)

------------------------------------------------------------------------------------------------------------------------

USE NORTHWIND
IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AllInvoices')
    DROP PROCEDURE AllInvoices
GO

CREATE PROCEDURE AllInvoices
AS
SELECT CompanyName, Orders.OrderID, ProductName,
 UnitPrice=ROUND([Order Details].UnitPrice, 2),
 Quantity,
 Discount=CONVERT(int, Discount * 100),
 ExtendedPrice=ROUND(CONVERT(money, Quantity * (1 - Discount) *
                      [Order Details].UnitPrice), 2)
FROM Products, [Order Details], Customers, Orders
WHERE [Order Details].ProductID = Products.ProductID And
      [Order Details].OrderID = Orders.OrderID And
      Orders.CustomerID=Customers.CustomerID
ORDER BY Customers.CustomerID, Orders.OrderID
COMPUTE SUM(ROUND(CONVERT(money, Quantity * (1 - Discount) *
            [Order Details].UnitPrice), 2))
            BY Customers.CustomerID, Orders.OrderID
COMPUTE SUM(ROUND(CONVERT(money, Quantity * (1 - Discount) *
            [Order Details].UnitPrice), 2))
            BY Customers.CustomerID

------------------------------------------------------------------------------------------------------------------------

IF EXISTS (SELECT name FROM sysobjects
        WHERE name = 'AvgBookRoyalties')
    DROP PROCEDURE AvgBookRoyalties
GO

CREATE PROCEDURE AvgBookRoyalties
@avgRoy float OUTPUT
AS
SET NOCOUNT ON
EXECUTE MakeTitlesCursor

OPEN Sales
    DECLARE @TitleID char(6), @Title varchar(80), @TitlePrice float, @TitleSales int
    DECLARE @Low int, @Hi int, @Royalty int
    DECLARE @currentTitle varchar(80)
    DECLARE @previousLow int
    DECLARE @BookRoyalties float
    DECLARE @TotalRoyalties float, @TitleCount int
    SET @previousLow = 0
    SET @BookRoyalties = 0
    SET @TotalRoyalties = 0
    SET @TitleCount = 0
   
    FETCH NEXT FROM Sales INTO @TitleID, @Title, @TitleSales, @TitlePrice,
           @Low, @Hi, @Royalty
    SET @currentTitle=@Title
    WHILE @@FETCH_STATUS = 0
    BEGIN
        IF @Title <> @currentTitle
        BEGIN
     SET @TotalRoyalties = @TotalRoyalties + @BookRoyalties
            SET @TitleCount = @TitleCount + 1
            SET @currentTitle = @Title
            SET @previousLow = 0
     SET @BookRoyalties = 0
        END
        IF @TitleSales < @hi
        BEGIN
            IF @Low <= @TitleSales
                SET @BookRoyalties = @BookRoyalties + @TitlePrice *
                   (@TitleSales - @previousLow)* @Royalty / 100.0
        END
        ELSE
        BEGIN
            SET @BookRoyalties = @BookRoyalties + @TitlePrice *
               (@Hi - @previousLow ) * @Royalty / 100.0
            SET @previousLow = @hi
        END
        FETCH NEXT FROM Sales INTO @TitleID, @Title, @TitleSales, @TitlePrice,
            @Low, @Hi, @Royalty
    END
    SET @TotalRoyalties = @TotalRoyalties + @BookRoyalties
    SET @TitleCount = @TitleCount + 1
CLOSE Sales
DEALLOCATE Sales
SET @avgRoy = @TotalRoyalties / @TitleCount