将其名称作为参数传递的表的行计数分配给存储过程

时间:2016-07-05 22:49:56

标签: sql sql-server tsql stored-procedures

我正在SQL Server 2008 R2中编写存储过程。

我要做的是将表的行数分配给变量;但是,我只将表的名称作为参数传递给存储过程。

这是我写的代码无效。

    CREATE PROCEDURE [dbo].[Foo]
        @inputTableName VARCHAR(50)
    AS
    BEGIN
       /*First Attempt*/
       DECLARE @numOfRows INT = (SELECT COUNT(*) FROM @inputTableName)
       /*Second Attempt*/
       DECLARE @numOfRows INT = (EXEC('SELECT COUNT(*) FROM ' + @inputTableName))
    END

在第一次尝试中,我收到此错误:必须声明表变量'@inputTableName'

在第二个中,我得到了这个: EXEC附近的语法不正确

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

CREATE PROCEDURE [dbo].[Foo]
  @inputTableName SYSNAME
, @RowNumber      INT       OUTPUT
AS
BEGIN
  SET NOCOUNT ON;
    Declare @Sql Nvarchar(max);

  SET @Sql = N' SELECT @RowNumber = COUNT(*) FROM  ' + QUOTENAME(@inputTableName)

  Exec sp_executesql @Sql
                    ,N'@RowNumber INT OUTPUT'
                    ,@RowNumber OUTPUT
END