2013-05-07 17 views
0

我的存儲過程接受一個參數並返回單個值。我的要求是要調用存儲過程每行與公司ID的表。我試過,但它不會工作如何在不使用遊標的情況下調用表中每行的參數化存儲過程

SELECT CompanyID,CompanyName,EmailID,'Exec Usp_GetCount' 

+CONVERT(varchar(256),companyID) 'Employees' from Tbl_Company 

感謝

+2

可能重複http://stackoverflow.com/questions/1656804/sql-call-stored - 每行不使用遊標) – 2013-05-07 12:57:51

+1

你不能改變進程是更多的基於集合的方法,這不是寫入SQL的最有效方式,你的性能將是可怕的。 – 2013-05-07 13:10:51

回答

4

在您選擇使用一個函數,而不是一個存儲過程 - 樣,那麼你可以做的事情:

SELECT CompanyId, CompanyName, dbo.GetCount(CompanyId) 'Employees' 
FROM Tbl_Company 
WHERE... 
0

試試這個 -

如果SP:

DECLARE @temp TABLE 
(
     CompanyID INT 
    , Cnt INT 
) 

DECLARE @CompanyID INT 

DECLARE cur CURSOR FAST_FORWARD READ_ONLY FOR 
    SELECT DISTINCT CompanyID 
    FROM dbo.Tbl_Company 

OPEN cur 

FETCH NEXT FROM cur INTO @CompanyID 

WHILE @@FETCH_STATUS = 0 BEGIN 

    DECLARE @Result INT 
    EXEC @Result = dbo.Usp_GetCount CONVERT(VARCHAR(256), @CompanyID) 

    INSERT INTO @temp (CompanyID, Cnt) 
    SELECT @CompanyID, @Result 

    FETCH NEXT FROM cur INTO @CompanyID 

END 

CLOSE cur 
DEALLOCATE cur 

SELECT 
     c.CompanyID 
    , c.CompanyName 
    , c.EmailID 
    , Employees = t.Cnt 
FROM dbo.Tbl_Company c 
JOIN @temp t ON t.CompanyID = c.CompanyID 

如果標量函數:

SELECT 
     c.CompanyID 
    , c.CompanyName 
    , c.EmailID 
    , Employees = dbo.GetCount(c.CompanyID) 
FROM dbo.Tbl_Company c 
[存儲過程對於每一行,而無需使用一個光標SQL調用](的
相關問題