Я пытаюсь написать хранимую процедуру на основе функции Scalar ниже, чтобы показать, что для каждого года и для каждого продукта количество клиентов? и если у продукта нет клиентов , тогда он должен быть в результате с Zero для количества клиентов, поэтому он должен показывать все продукты. а затем я хочу вставить его в временную таблицу. Это то, что я пробовал до сих пор, но в некоторых случаях в SP я не знаю, что мне нужно сделать, чтобы добраться до моего результата. Я предполагаю, что он застрял в петле :( Любая идея ??Как хранить данные в таблице темп с помощью хранимой процедуры?
Скалярное:
CREATE FUNCTION NumOfCustomers
(
@year INT,
@productId INT,
@typeOfCustomer NVARCHAR
)
RETURNS TABLE AS
RETURN
(
SELECT COUNT(DISTINCT Sales.Customer.CustomerID) AS number
FROM Sales.SalesOrderDetail SOD
INNER JOIN Sales.SalesOrderHeader SOH ON SOD.SalesOrderID = SOH.SalesOrderID
INNER JOIN Sales.Customer ON Customer.CustomerID = SOH.CustomerID
WHERE
SOD.ProductID = @productID
AND YEAR(SOH.OrderDate) = @year
AND Sales.Customer.CustomerType = @typeOfCustomer
)
GO
хранимая процедура:
CREATE PROCEDURE MYsp AS
BEGIN
DECLARE @year INT, @count INT
DECLARE yearCursor CURSOR FOR
SELECT DISTINCT YEAR(SOH.OrderDate) FROM Sales.SalesOrderHeader SOH
--ORDER BY YEAR DESC
OPEN yearCursor
FETCH NEXT FROM yearCursor INTO @year
--** Starting the loop in curser and filling the data
SET @count = 1
WHILE(@@FETCH_STATUS = 0)
BEGIN
DECLARE @prodID INT
DECLARE @NumOfCustomers INT
DECLARE prodCursor CURSOR FOR
SELECT P.ProductID FROM Production.Product P
OPEN prodCursor
FETCH NEXT FROM prodCursor INTO @prodID
SET @count = 1
WHILE(@@FETCH_STATUS = 0)
BEGIN
SELECT @NumOfCustomers = NUM.number FROM NumOfCustomers(@year, @prodID, 's') NUM
INSERT #temp (Year,ProductID,NumOfCustomers) VALUES (@year,@prodID,@NumOfCustomers)
SET @count = @count+1
FETCH NEXT FROM prodCursor INTO @prodID
END
CLOSE prodCursor
DEALLOCATE prodCursor
FETCH NEXT FROM yearCursor INTO @year
END
CLOSE yearCursor
DEALLOCATE yearCursor
END
GO
И тогда я хочу, чтобы выполнить его и получить данные эта временная таблица:
EXEC MYsp
SELECT * FROM #temp
Aziz Он ничего в таблице темп не вставить ...! Ошибка: Процедура MYsp не имеет параметров и аргументов. –
Это работает на моем сервере sql 2012 без ошибок. –