无论列数/类型如何,都可以获取存储过程结果中的行数

时间:2012-10-02 11:04:57

标签: sql sql-server tsql stored-procedures dynamic-sql

我开发了以下代码:

  CREATE PROCEDURE [dbo].[Test01]
  AS
  BEGIN
    SELECT * FROM TestTable
  END


  CREATE PROCEDURE [dbo].[Test02]
  AS
  BEGIN
    DECLARE @tmp TABLE
    (
      TestID int,
      Test   nvarchar(100),
    )
    INSERT INTO @tmp
    EXEC Test01
    SELECT COUNT(*) FROM @tmp
  END

但如果我在TestTable上添加或删除列,我必须修改@tmp,否则结果为:

  

列名或提供的值数与表定义

不匹配

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

尝试手动指定列:

SELECT a, b FROM TestTable

INSERT INTO @tmp (a, b)

这应该可以解决您提到的错误。

答案 1 :(得分:0)

我的第一个评论是SELECT *不赞成,除非你真的知道你在做什么。我会强烈建议您在特定用例中反对它,正是因为它可以帮助您解决您已经发现的问题。

在您的特定情况下,对于编写的特定SP,您尚未使用SET NOCOUNT ON,因此您可以使用

检索计数
SELECT @@ROWCOUNT
但是,正如马丁评论的那样,这只是你拼凑的一些示例代码。否则,为什么甚至使用2个SP。