获取不带@@rowcount的锁定存储过程返回的行数

5anewei6  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(324)

作为我在microsoftsqlserver中编写的自动化脚本的一部分,我需要计算存储过程返回的行数,不幸的是,这个存储过程被锁定/加密,并且有一个 DROP TABLE 之后的声明 SELECT 重置 @@rowcount (到0)。
是否有任何方法可以获取/捕获该存储过程返回的行的行数,而不必更改存储过程中的代码?

u4vypkhs

u4vypkhs1#

您可以将…exec插入临时表或表变量,然后从表中计算行数。
像这样:

create proc rr as
select 1 aa, 1 bb union select 2, 2

declare @t table (aa int, bb int)
declare @c int

insert into @t
exec rr

select @c = count(*) from @t
disho6za

disho6za2#

一种方法是在proc执行时捕获消息,并从中选择“受影响的行”详细信息(假设proc只返回一次行,您可以添加多个返回)。
请尝试以下操作:

CREATE TABLE #temp (run_details varchar(1000)) 
INSERT INTO #temp
EXEC master..xp_cmdshell 'SQLCMD -S "Server\Instance" -Q "exec db_name.schema_name.proc_name"'
SELECT TOP 1 replace(replace(t.run_details, '(', ''), 'rows affected)', '') Rows_affected_by_proc FROM #temp t
WHERE t.run_details LIKE '(% rows affected)'

结果:

相关问题