0
我的存儲過程接受一個參數並返回單個值。我的要求是要調用存儲過程每行與公司ID的表。我試過,但它不會工作如何在不使用遊標的情況下調用表中每行的參數化存儲過程
SELECT CompanyID,CompanyName,EmailID,'Exec Usp_GetCount'
+CONVERT(varchar(256),companyID) 'Employees' from Tbl_Company
感謝
我的存儲過程接受一個參數並返回單個值。我的要求是要調用存儲過程每行與公司ID的表。我試過,但它不會工作如何在不使用遊標的情況下調用表中每行的參數化存儲過程
SELECT CompanyID,CompanyName,EmailID,'Exec Usp_GetCount'
+CONVERT(varchar(256),companyID) 'Employees' from Tbl_Company
感謝
在您選擇使用一個函數,而不是一個存儲過程 - 樣,那麼你可以做的事情:
SELECT CompanyId, CompanyName, dbo.GetCount(CompanyId) 'Employees'
FROM Tbl_Company
WHERE...
試試這個 -
如果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調用](的
可能重複http://stackoverflow.com/questions/1656804/sql-call-stored - 每行不使用遊標) – 2013-05-07 12:57:51
你不能改變進程是更多的基於集合的方法,這不是寫入SQL的最有效方式,你的性能將是可怕的。 – 2013-05-07 13:10:51