【发布时间】:2020-12-18 03:11:49
【问题描述】:
问题是...我将收到一个命令来执行一个过程...比如EXEC SAMPLE_PROCEDURE_NAME,我无法修改或将计数/数字传递给该过程
现在,在执行时,该过程正在返回所有行。我想限制收到的行数
以下是我尝试过的一些事情(程序名称 = Demo4)
这个失败了
select top 10 * FROM (EXEC Demo4)
这个也失败了
;WITH Results_CTE AS
(
EXEC Demo4
)
select top 10 *
FROM Results_CTE
这个也失败了
DECLARE @tmpNewValue TABLE (*)
INSERT INTO @tmpNewValue
EXEC Demo4
select top 10 * FROM @tmpNewValue
如果有人能提供帮助,我将不胜感激。
【问题讨论】:
-
您不能在存储过程中
SELECT。如果要限制过程返回的行数,则需要将TOP子句放在过程中的SELECTinside 中。另外,在使用TOP时,请确保您有ORDER BY;否则你会得到任意行,结果将不一致。 -
也许您应该在您的过程中添加一个
@Top参数,然后在您的存储过程的定义中添加TOP (@TOP)和一个ORDER BY。 -
我无法修改程序
-
这有一种XY Problem 的强烈气味。正如我第一次提到的,您不能从程序中
SELECT。考虑到您甚至不知道定义,那么您甚至没有可行的ORDER BY子句。您需要正确地定义您INSERT到的表,或ALTER过程。考虑到你不知道定义,你只剩下后者了。 -
您使用什么应用程序来执行 proc?您只能处理客户端应用程序中返回的前 10 行。没有 T-SQL 解决方案可以限制具有未知结果集架构的任意 proc 的行数,除非您使用 SQLCLR。
标签: sql sql-server database