![](/img/trans.png)
[英]How to store data to temp table from Stored Procedure With Output parameter?
[英]How to store data on a temp table using Stored procedure?
我正在嘗試根據以下標量函數編寫存儲過程,以顯示每年和每種產品有多少客戶? 如果產品沒有客戶,則結果應為客戶數量為零,因此應顯示所有產品。 然后我想將其插入到臨時表中。 到目前為止,這是我一直在嘗試的方法,但是對於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
在過程中使用select語句:
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
Select *
from #temp
END
GO
現在執行程序:
EXEC MYsp
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.