2016-05-24 40 views
0

私はCourceInstanceと呼ばれるテーブルを持ち、これには期間と年の属性が含まれています。 CourseInstanceのPeriod属性の値を私のテーブル変数に入れようとしています。スカラー変数を宣言する必要があります - SQL Server

Must declare the scalar variable "@tablePeriod".

何の問題があることができます:それは私がEXEC @tablePeriod一部またはそれは私にエラーを与えて全体のコードを実行しますが、問題なくたびに実行することができますか? @tablePeriodはすでに宣言されています。

DECLARE @tablePeriod TABLE (Period INT) INSERT INTO @tablePeriod (Period) 
SELECT Period FROM CourseInstance WHERE Year = 2015 

EXEC @tablePeriod 
+0

もちろん、宣言されていますが、表型変数であるためスカラーではありません。 – dasblinkenlight

+2

'EXEC @ tablePeriod'が* do *に何を期待していますか?私は本当にあなたの意図がここにあったかを推測することができません。 –

+0

@dasblinkenlightこの状況でスカラーの意味を理解していません。 –

答えて

1

私はそれがエラーを返しません

EXEC @tablePeriod 

select * from @tablePeriod 

のようなものでなければなりません期待したいが、あなたは1つのブロックに全体のコードを実行する必要があります。

変数を宣言文とは別に使用するコードを実行するとエラーが発生します。

編集:今私はあなたが達成したいことを知っていると思います。実際には、DECLAREとINSERT文で十分です。 何も必要ありません。同じブロック内

select * from @tablePeriod 

を実行

は、値がテーブル変数に挿入されていることを示します。

+0

私もそれをやっていますが、まだそれは私にエラーを与える。私はこの変数を何度も宣言していますが、コードの失敗のためにこの変数を使用することをやめました。今私は別のプロジェクトでそれを宣言しています。問題は多分それが原因かもしれない? –

+0

問題は、少なくともあなたがどのようにそれを使用するか、「EXEC」です。 – vasja

+0

助けてくれてありがとう。できます。しかし、どのような状況でEXECをvariabelに使用していますか?私は他のいくつかの例で人々がそれを行うのを見ただけです –

1

テンポリーテーブルで試すことができます。私はテンポリーテーブルがテーブル変数より優れていると思います。

SELECT Period INTO #tablePeriod FROM CourseInstance WHERE Year = 2015; 
SELECT * FROM #tablePeriod; 
+0

なぜあなたはそれがより良いと主張しますか?モチベーションは何ですか? – SchmitzIT

+0

@SchmitzIT 両方に長所と短所があります。コードははるかに短く、余分なテーブルを作成する必要がないため、上記の質問のみを意味します。私はすべての状態を意味するものではありません。 パフォーマンスの参照用のリンクを追加します。 https://www.mssqltipscom/sqlservertip/2825/sql-server-temp-table-vs-table-variable-performance-testing / –

関連する問題