我有一个存储过程,返回行:
CREATE PROCEDURE MyProc
AS
BEGIN
SELECT * FROM MyTable
END
我的实际过程稍微复杂一些,这就是为什么需要存储过程。
是否可以通过调用此过程来选择输出?
喜欢的东西:
SELECT * FROM (EXEC MyProc) AS TEMP
我需要使用SELECT TOP X、ROW_NUMBER和一个附加的WHERE子句来分页我的数据,我并不想将这些值作为参数传递。
我有一个存储过程,返回行:
CREATE PROCEDURE MyProc
AS
BEGIN
SELECT * FROM MyTable
END
我的实际过程稍微复杂一些,这就是为什么需要存储过程。
是否可以通过调用此过程来选择输出?
喜欢的东西:
SELECT * FROM (EXEC MyProc) AS TEMP
我需要使用SELECT TOP X、ROW_NUMBER和一个附加的WHERE子句来分页我的数据,我并不想将这些值作为参数传递。
当前回答
可以使用用户定义函数或视图来代替过程。
一个过程可以返回多个结果集,每个结果集都有自己的模式。不适合在SELECT语句中使用。
其他回答
如果'DATA ACCESS'为假,
EXEC sp_serveroption 'SQLSERVERNAME', 'DATA ACCESS', TRUE
之后,
SELECT * FROM OPENQUERY(SQLSERVERNAME, 'EXEC DBNAME..MyProc @parameters')
它的工作原理。
您需要声明一个包含与存储过程返回的列相同数量的表类型。表类型中列的数据类型和过程返回的列的数据类型应该相同
declare @MyTableType as table
(
FIRSTCOLUMN int
,.....
)
然后需要在刚刚定义的表类型中插入存储过程的结果
Insert into @MyTableType
EXEC [dbo].[MyStoredProcedure]
最后,只需从表类型中选择即可
Select * from @MyTableType
可以使用用户定义函数或视图来代替过程。
一个过程可以返回多个结果集,每个结果集都有自己的模式。不适合在SELECT语句中使用。
尝试将你的过程转换为一个内联函数,返回如下表:
CREATE FUNCTION MyProc()
RETURNS TABLE AS
RETURN (SELECT * FROM MyTable)
然后你可以称它为
SELECT * FROM MyProc()
您还可以选择向函数传递参数,如下所示:
CREATE FUNCTION FuncName (@para1 para1_type, @para2 para2_type , ... )
并称之为
SELECT * FROM FuncName ( @para1 , @para2 )
听起来您可能只需要使用视图。视图允许将查询表示为表,以便可以查询视图。