我在sql server上有一个存储过程,它有2个参数。我想为select返回的每一行运行stp。
CREATE PROCEDURE stpMySTP @param1, @param2
AS BEGIN
--select something from database regarding this parameters
END
我想运行此stp并传递select语句返回的@param2
参数列表。
类似的东西:
EXEC stpMySTP '',(SELECT ....)
有什么想法吗?
答案 0 :(得分:2)
如果我正确地阅读了这个问题(我可能不会):::
这是光标可能解决方案之一。但是,游标通常是可怕的解决方案。
USE [Northwind]
GO
/* uspCustomerGetSingleWithOrders 'SIMOB' */
CREATE PROCEDURE [dbo].[uspCustomerGetSingleWithOrders] (
@customerId varchar(12)
)
AS
SET NOCOUNT ON
Select
--CustomerID ,
--ContactName ,
--City
CustomerID,CompanyName,ContactName,ContactTitle,Address,City,Region,PostalCode,Country,Phone,Fax
from
dbo.Customers
WHERE
LTRIM(RTRIM(UPPER(CustomerID))) = LTRIM(RTRIM(UPPER(@customerId)))
Select
OrderID,CustomerID,EmployeeID,OrderDate,RequiredDate,ShippedDate,ShipVia,Freight,ShipName,ShipAddress,ShipCity,ShipRegion,ShipPostalCode,ShipCountry
from
dbo.Orders o
WHERE
LTRIM(RTRIM(UPPER(o.CustomerID))) = LTRIM(RTRIM(UPPER(@customerId)))
SET NOCOUNT OFF
GO
现在是一个游标(:<)
Use Northwind
GO
declare @PROC_fetch_status int
declare @CustomerID varchar(12)
declare @ContactName varchar(24)
-- Select * from Customers
DECLARE curCustomers CURSOR FAST_FORWARD FOR select CustomerID , ContactName
from Customers Order by ContactName
OPEN curCustomers
-- Perform the first fetch.
fetch curCustomers into @CustomerID , @ContactName
select @PROC_fetch_status = @@fetch_status
IF @PROC_fetch_status <> 0
begin
print 'No Records'
end
WHILE @PROC_fetch_status = 0
BEGIN
print 'Current Customer = ' + @CustomerID + ' : ' + @ContactName
print '------------------------------------'
print ''
EXEC dbo.uspCustomerGetSingleWithOrders @CustomerID
print ''
print ''
FETCH NEXT FROM curCustomers INTO @CustomerID , @ContactName
select @PROC_fetch_status = @@fetch_status
END
CLOSE curCustomers
DEALLOCATE curCustomers
但是我建议阅读“基于集合”而不是“按行划分”的哲学。 如果您有兴趣,请留言。
答案 1 :(得分:1)
我建议如下: