如何计算存储过程以最快方式返回的行数。存储过程返回大约 100K 到 1M 记录的行。
问问题
93978 次
7 回答
29
于 2013-01-23T07:32:30.953 回答
5
您可以定义输出变量:
create procedure x
(@p1 int output)
as
select @p1 = count(*)
from Table
于 2013-01-23T07:31:55.143 回答
4
答案是 use@@ROWCOUNT
仍然有效,但我不建议EXEC
在现有 answer之后直接运行。
SELECT
语句并不总是最后一个语句是存储过程,或者您可能有多个SELECT
语句:
设想:
CREATE PROCEDURE p
AS
BEGIN
CREATE TABLE #t(i INT);
INSERT INTO #t(i) VALUES (1),(2);
SELECT i FROM #t;
DROP TABLE IF EXISTS t;
END
EXEC p;
-- i
-- 1
-- 2
SELECT @@ROWCOUNT;
-- 0 instead of 2
一种方法是使用输出参数(与存储过程结果集一样多):
CREATE PROCEDURE p(@cnt INT OUT)
AS
BEGIN
CREATE TABLE #t(i INT);
INSERT INTO #t(i) VALUES (1),(2);
SELECT i FROM #t;
SET @cnt = @@ROWCOUNT; -- immediately after SELECT
DROP TABLE IF EXISTS t;
END
DECLARE @i INT;
EXEC p2 @cnt = @i OUT;
SELECT @i;
-- 2
于 2020-03-15T07:54:49.923 回答
1
Create procedure procedurename
AS
Begin
Select * from Table --if you want where condition write here
End
Exec Procedurename
Select @@rowcount
于 2014-05-07T12:25:33.320 回答
0
我有一个类似的任务,但有一个限制,我不能改变 SP 来获得计数。因此:
sp_configure 'show advanced options', 1;
reconfigure;
go
sp_configure 'ad hoc distributed queries', 1;
reconfigure;
go
select count(*) from
openrowset('SQLOLEDB','Data Source=localhost;Trusted_Connection=yes;
Integrated Security=SSPI','exec DBNAME..SPName')
于 2016-10-17T10:29:28.510 回答
0
获得相同结果的另一种方法
CREATE PROCEDURE NOMBRE_PROCEDIMIENTO
as
BEGIN
if EXISTS (SELECT * from NOMBRE_TABLA WHERE CONDITIONS HERE)
BEGIN
SELECT @@ROWCOUNT
END
END
于 2018-10-05T15:32:32.277 回答
0
到目前为止,唯一对我有用的是:
一种。暂时修改存储过程以将结果数据集转储到表中。如果更改存储过程不是一个选项,则将 Alter Procedure 替换为 Declare 并删除结尾,如果不是可选的,则提供参数值并作为将数据集转储到表中的查询执行。
湾。编写表格并使用 SSMS 删除它。
C。使用脚本在查询中创建一个虚拟表,并使用 Insert into 和 exec 存储过程来填充它。
d。计算记录。
于 2020-10-07T17:50:26.773 回答