使用表值函数或视图从存储过程返回结果集

我正在使用SQL Server 2000,并对如何执行此操作感到困惑: 我有一个存储过程,它返回一个结果集,该结果集绑定到.Net Web应用程序中的gridview。 现在我想要一个“表”,这样我就可以在现有的VB6应用程序中使用它,如下所示:
SELECT * FROM myTable 
...“myTable”的模式反映了从此sproc返回的结果集中的列。 这是一个有效的脚本:
CREATE TABLE #ResultSet (
    StateFIPS           CHAR(2)
    ,CountyFIPS         CHAR(3)
,StateName          VARCHAR(30)
,CountyName         VARCHAR(40)
,MostRecentData_P       VARCHAR(20)
,PData              VARCHAR(3)
,AvgNbrMtgPerMonthInLastYear_P  INT
,MostRecentData_R       VARCHAR(20)
,RData              VARCHAR(3)
,AvgNbrMtgPerMonthInLastYear_R  INT
,MostRecentData_FHA     VARCHAR(20)
,MostRecentData_VA      VARCHAR(20)
)
INSERT INTO #ResultSet
EXECUTE dbo.FetchCoverageByState_V2 
SELECT * FROM #ResultSet
我试图把它放到一个视图中,但我得到了错误:
"Views or functions are not allowed on temporary tables"
我也试过这样的函数:
create function dbo.udfCoverages() 

returns @ResultSet table (
    StateFIPS   CHAR(2)
    ,CountyFIPS CHAR(3)
,StateName  VARCHAR(30)
,CountyName VARCHAR(40)
,PData      VARCHAR(3)
,RData      VARCHAR(3)  
) as
INSERT @ResultSet (
    StateFIPS           CHAR(2)
    ,CountyFIPS         CHAR(3)
,StateName          VARCHAR(30)
,CountyName         VARCHAR(40)
,MostRecentData_P       VARCHAR(20)
,PData              VARCHAR(3)
,AvgNbrMtgPerMonthInLastYear_P  INT
,MostRecentData_R       VARCHAR(20)
,RData              VARCHAR(3)
,AvgNbrMtgPerMonthInLastYear_R  INT
,MostRecentData_FHA     VARCHAR(20)
,MostRecentData_VA      VARCHAR(20)
)
EXECUTE dbo.FetchCoverageByState_V2  
return
在UDF尝试中,我在INSERT附近遇到语法错误,我想知道SQL Server 2000是否支持这一点。 你会推荐什么? EDIT-UPDATE(根据Ray的第一个建议):
create function dbo.udfCoverages() 
returns @ResultSet table (
    StateFIPS   CHAR(2)
    ,CountyFIPS CHAR(3)
,StateName  VARCHAR(30)
,CountyName VARCHAR(40)
,PData      VARCHAR(3)
,RData      VARCHAR(3)  
) as
BEGIN   
INSERT @ResultSet 
(
         StateFIPS          CHAR(2)
        ,CountyFIPS         CHAR(3)
    ,StateName          VARCHAR(30)
    ,CountyName         VARCHAR(40)
    ,MostRecentData_P       VARCHAR(20)
    ,PData              VARCHAR(3)
    ,AvgNbrMtgPerMonthInLastYear_P  INT
    ,MostRecentData_R       VARCHAR(20)
    ,RData              VARCHAR(3)
    ,AvgNbrMtgPerMonthInLastYear_R  INT
    ,MostRecentData_FHA     VARCHAR(20)
    ,MostRecentData_VA      VARCHAR(20)
)
    EXECUTE dbo.FetchCoverageByState_V2 
    return
END
我得到:第19行:'CHAR'附近的语法不正确。注意:在上面的INSERT之后,第19行是2行。     
已邀请:
尝试使用OPENROWSET,就像这个问题一样。我以为我曾经写过一段时间的博客,但也许不是。 将存储过程的结果插入临时表 记得向Aaron回答。     
无论你做什么,你都无法将过程转换为表值函数,也不能转换为视图。对于允许函数执行什么以及不执行什么操作存在严重限制。因为TVF或视图可以与任何其他语句组合,例如作为子查询出现在SELECT中,或者是UPDATE / INSERT / DELETE等等的一部分,因此对函数施加了某些行为限制,特别是什么时候来执行副作用。程序儿子另一方面像鸟一样自由。 你唯一能做的就是使用INSERT ... EXEC将一个过程的输出捕获到一个表中,就是这样,加上额外的限制,不能有另一个INSERT ... EXEC ...嵌套。 你发布的所有内容都指出fetchCcoverageByState_V2必须是一个表值函数,这是你应该追求的唯一途径。     
你需要
begin
end
缠绕功能体(在
as
之后)     

要回复问题请先登录注册