作为我在microsoftsqlserver中编写的自动化脚本的一部分,我需要计算存储过程返回的行数,不幸的是,这个存储过程被锁定/加密,并且有一个 DROP TABLE 之后的声明 SELECT 重置 @@rowcount (到0)。是否有任何方法可以获取/捕获该存储过程返回的行的行数,而不必更改存储过程中的代码?
DROP TABLE
SELECT
@@rowcount
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
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)'
结果:
2条答案
按热度按时间u4vypkhs1#
您可以将…exec插入临时表或表变量,然后从表中计算行数。
像这样:
disho6za2#
一种方法是在proc执行时捕获消息,并从中选择“受影响的行”详细信息(假设proc只返回一次行,您可以添加多个返回)。
请尝试以下操作:
结果: