我有一个存储过程,返回行:
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子句来分页我的数据,我并不想将这些值作为参数传递。
当前回答
听起来您可能只需要使用视图。视图允许将查询表示为表,以便可以查询视图。
其他回答
听起来您可能只需要使用视图。视图允许将查询表示为表,以便可以查询视图。
你可以用OPENROWSET欺骗一下:
SELECT ...fieldlist...
FROM OPENROWSET('SQLNCLI', 'connection string', 'name of sp')
WHERE ...
当然,这仍然会每次运行整个SP。
你要么想要一个表值函数,要么将你的EXEC插入一个临时表:
INSERT INTO #tab EXEC MyProc
可以使用用户定义函数或视图来代替过程。
一个过程可以返回多个结果集,每个结果集都有自己的模式。不适合在SELECT语句中使用。
没有必要使用临时表。
这就是我的解
SELECT * FROM
OPENQUERY(YOURSERVERNAME, 'EXEC MyProc @parameters')
WHERE somefield = anyvalue