2016-07-05 6 views
0

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 

が、私はこのエラーを取得しています:EXEC

近く 不正な構文:は、テーブル変数を宣言しなければなりません「@inputTableName」第二一

、私はこれを取得しています

何か助けていただければ幸いです。

答えて

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