2017-04-08 1 views
0

テーブル名に変数を付けるために文を実行しようとしています。私はsqlを初めて使用しているので、オンラインでこの問題の解決策を見つけることはできませんでした。私はこのクエリを実行するたびにSQLサーバで時刻変数を使用するときにスカラー変数を宣言する必要があります

Declare @t time 
Set @t='12:00:00.1' 
Declare @ttable varchar (255) 
Set @ttable='Temp'+(Select top 1 ID from mtable) 

    Exec('Insert into '[email protected]+'(Timestamp) values ('+'@t'+')') 

私は次のエラーを取得する:

Msg 137, Level 15, State 2, Line 1 Must declare the scalar variable "@t".

は私が私が実行しています正確に何を確認していません。私はSQL Server Management Studio(SQL Server 2008 R2)を開き、データベースとテーブルを作成しました。どんな助けも大歓迎です。

+1

幹部に@tの前後に引用符を削除して試すことができますか? –

+0

あなたの質問を編集し、サンプルデータ、希望の結果を提供し、あなたがしようとしていることを説明してください。 「変数をテーブル名に付ける」は分かりません。 –

答えて

1

SQLステートメントを動的に呼び出す正しい方法は、sp_executesqlとパラメーターを使用することです。あなたはどうしたら、あなたのテーブルが既に存在すると仮定:

Declare @t time; 
Set @t = '12:00:00.1'; 

Declare @tablename varchar(255); 

Set @tablename = 'Temp'+ (Select top 1 ID from mtable); 

declare @sql nvarchar(max) 
set @sql = 'Insert into @tablename(Timestamp) values (@t)'; 

set @sql = replace(@sql, '@tablename', @tablename); -- alas, cannot use parameters for table names 

exec sp_executesql @sql, N'@t time', @t = @t; 

私はそれがこのようなテーブル名を建設している貧しいデータベース設計であると思います。代わりに、idの単一のテーブルと追加の列が必要です。

+0

これは私に次のエラーを与えています: メッセージ102、レベル15、状態1、行6 '='の近くの構文が正しくありません。 メッセージ137、レベル15、状態2、行7 スカラー変数 "@sql"を宣言する必要があります。 メッセージ137、レベル15、状態2、行9 スカラー変数 "@sql"を宣言する必要があります。 – Kuba

+0

@Kubaの回答が編集されました – Hadi

+0

これはうまくいきました。ありがとうございました! – Kuba

0

あなたは、これは

Declare @t time 
declare @tVar varchar(max) 
Set @t='12:00:00.1' 
set @tVar=CONVERT(VARCHAR,@t) 
Declare @ttable varchar (255) 
Set @ttable='Temp'+(Select '1') 

    --PRINT('Insert into '[email protected]+'(Timestamp) values ('+CONVERT(VARCHAR,@t)+')') 
    EXEC ('Insert into '[email protected]+'(Timestamp) values ('[email protected]+')') 
関連する問題