0

私の要件では、以下のような一時テーブルを 1 つ作成しています。

CREATE TABLE #ResourceMonthlyTimeReport
(
    RowId INT IDENTITY(1,1),
    ResourceID UNIQUEIDENTIFIER,
    TaskId UNIQUEIDENTIFIER,
    ProjectId UNIQUEIDENTIFIER,
    -- Some column names containing date should come here.
)

上の表では、日付列は次のように表示されます。

[01 Mar, 2013] NVARCHAR(10),
[02 Mar, 2013] NVARCHAR(10),
[03 Mar, 2013] NVARCHAR(10),

...そして、列の数はパラメータ値に依存し@FromDate@ToDate

dbo.F_ST_DaysColumns(@FromDate, @ToDate)次の出力を文字列として生成する関数を作成しました。

[01 Mar, 2013] NVARCHAR(10),
[02 Mar, 2013] NVARCHAR(10),
[03 Mar, 2013] NVARCHAR(10)

現在、この結果を上記の一時テーブルに追加する方法がわかりません#ResourceMonthlyTimeReport

私はこのようなことをしました:

DECLARE @DateColumns AS VARCHAR(MAX)
SET @DateColumns = dbo.F_ST_DaysColumns(@FromDate, @ToDate)

ALTER TABLE #ResourceMonthlyTimeReport ADD @DateColumns

しかし、以下のようなエラーが表示されます:

メッセージ 102、レベル 15、状態 1、手順 ST_Proc_Rpt_MonthlyTimeReportSummary、行 94
'@DateColumns' 付近の構文が正しくありません

4

2 に答える 2

1

ああ… 単純すぎるけど、この質問をフォーラムに投稿する前は、こんな風に考えられなかった。とにかく、他の誰かがそれを使用できます:

EXEC('ALTER TABLE #ResourceMonthlyTimeReport ADD ' + @DateColumns)
于 2013-04-04T05:09:11.913 に答える
0

テーブル変数は、メモリ内に作成される一時テーブルのようなもので、作成されているスコープ内で使用できます。いったん作成されると、ALTER TABLE ステートメントを使用してテーブル変数の構造を変更することはできません。宣言に別の列を追加して、必要なときにいつでも使用することをお勧めします。テーブル変数には、NULL 値も受け入れる列を含めることができることに注意してください。

于 2015-04-11T10:07:15.877 に答える