2017-08-31 6 views
0

T-SQL(SQL Server 2012で)ストアドプロシージャを使用して、パラメータを渡してテーブル名の一部として渡そうとしましたが、エラーが発生しています。T-SQL - tablenameの一部としてパラメータを使用する

CREATE PROCEDURE test_proc 
    @year NVARCHAR(4) 
AS 
BEGIN 
    UPDATE [email protected] 
    ..... 

彼ら私は、パラメータ値2017でプロシージャを呼び出す場合、私はそれがTablename2017ABC

を更新したい、誰もがどのように使用するストアドプロシージャ(または他のT-SQL)を使用して説明することができますテーブル名の一部としてのパラメータ?あなたはこれらの線に沿って何かを行うことができ

おかげ

+1

外観は、ここにトンがあります。 – maSTAShuFu

+3

異なる名前のテーブルに同じデータがあるのはなぜですか?データを年単位の表にアーカイブすることは良い考えであるという誤解はよくあります。 1つのテーブルに対して適切なインデックスを使用して、自分で努力を惜しみません –

+0

これは、主キーの最初の部分として 'year'のカラムを持つ** ONE **テーブルと、複数のファイルやディスクに展開する必要があります。 –

答えて

1

...動的SQLの

DECLARE 
    @year NCHAR(4) = N'2017', 
    @DeBug BIT = 1; -- 0=execute & 1=print sql 

DECLARE @sql NVARCHAR(4000) = N' 
UPDATE tny SET 
    tny.ColumnName = ''Something'' 
FROM 
    dbo.TableName' + @year + N' tny 
WHERE 
    tny.OtherColumn = ''SomethingElse'';'; 

IF @DeBug = 1 
BEGIN 
    PRINT(@sql);  
END; 
ELSE 
BEGIN 
    EXEC sys.sp_executesql @sql 
END; 
関連する問題