2016-10-25 10 views
1

私はストアドプロシージャを作成しています。しかし、この手順ではテーブル名は動的です。変数テーブルから行番号を取得したい。しかし、私は@rownumberを選択クエリのリターンで設定しますか?書き込み方法ストアドプロシージャの動的テーブル名を使用してクエリを選択しますか?

Create Proc update_eMail 
    (@tablename nvarchar(50), 
    @columnname nvarchar(50)) 
AS 
Begin 

    Declare @q_getrowNumber NVARCHAR(MAX) 
    Declare @rownumber int 
    SELECT @rownumber = Count(ID) FROM quotename(@tablename) // doesnt work 

END 

ここでは、事前

答えて

2

を使用して目標を達成するための一つの方法です。それが動作します。

ALTER PROC update_eMail(@tablename NVARCHAR(50)) 
AS 
BEGIN 
DECLARE @RowNumber NVARCHAR(MAX)='' 

    set @RowNumber='select Count(ID) FROM '[email protected]+'' 
    exec(@RowNumber) 
END 

ORこの1つはあなたのための最も簡単になりますあなたのクエリでのコードの下に

ALTER PROC update_eMail1 
(
    @tablename NVARCHAR(50) 
) 
AS 
BEGIN 
    DECLARE @sql NVARCHAR(4000)= '',@rownumber INT 
    SET @sql = 'SELECT @rownumber = Count(ID) FROM '+quotename(@tablename) 

    EXEC sp_executesql @sql, N'@rownumber int output',@rownumber OUTPUT 

    SELECT @rownumber 

END 
+0

'EXEC'コード行の後にいくつかのコードを書くと、それは機能しますか? 1つのストアドプロシージャに1つのEXECメソッドしか実行されていませんか? – pseudocode

+0

はい、動作します。 'Exec'コード行の後にコードを書くことができます。 – mansi

+0

別のストアド・プロシージャ内で複数のストアド・プロシージャを実行できます(最大32レベルまで) – mansi

4

のおかげであなたは、動的クエリ これを試してみてください間違った手順を記述する動的SQL

declare @sql NVARCHAR(4000)= '' 

set @sql = 'SELECT @rownumber = Count(ID) FROM '+ quotename(@tablename) 

exec sp_executesql @sql, N'@rownumber int output',@rownumber output 
+0

が、この行のコードの仕上げ: '' execをsp_executesql @sql、N '@ rownumber int output'、@ rownumber output ''残りのコードは機能しません。 – pseudocode

0

をお試しください:私はこのような更新

Create Proc update_eMail 
    @tablename nvarchar(50) 
AS 
Begin 
    EXEC ('SELECT Count(ID) FROM '[email protected]+'') 
END 
関連する問題