2016-12-04 9 views
1

は、私はこのようなSQLクエリを持っている:WHILE SQL Serverエラー

ALTER PROCEDURE [dbo].[sp_dynamic_column_list](
    @tahun varchar(4), 
    @bulan varchar(2), 
    @pks varchar(3)) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @totalrow int 
    DECLARE @inc int = 1 
    DECLARE @dynamictable NVARCHAR(MAX) 

    CREATE TABLE #temp 
    (
     tanggal datetime, 
    ) 

    -- query cari column dulu baru alter table temp diatas 
    SET @totalrow = dbo.fn_count_row_penerimaan(2014,11,40) 

    WHILE (@inc <= @totalrow) 
    BEGIN 
     ALTER TABLE #temp ADD @inc FLOAT 
     SET @inc = @inc + 1 
    END 

    INSERT INTO #temp 
     EXEC sp_get_list_penerimaan_pks2 @tahun, @bulan, @pks 

    SELECT * FROM #temp 

    DROP TABLE #temp 
END 

私はこのようなエラーを得た:

[のErr] 42000 - [SQL Serverの]付近に正しくない構文 '@inc' 。

私は、SQL Serverへの新たなんだと、この問題の解決にあなたがリンクに述べたように文を実行して使用する必要があり、事前に

おかげ

+2

サイドノート:ストアドプロシージャの 'sp_'プレフィックスを使用しないでください**。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。 –

答えて

3

ALTER TABLE my_table ADD @column INT

を知りたいです。

SQLのなステートメントの変数値で
WHILE @inc <= @totalrow 
BEGIN 
    exec ('ALTER table #temp add '[email protected]+' FLOAT set '[email protected]+' = '+ @inc+'+1') 
END 
+0

それはうまくいく! – Jsnow

+0

@Jsnow動作すればこの回答を受け入れる必要があります。投票矢印の下にあるマークをチェックしてください – Hadi

1

列名として提供することができない、あなたは次のように、動的SQLクエリを使用する必要があり、これを達成するために:

WHILE (@inc <= @totalrow) 
BEGIN 
    Declare @strquery as varchar(4000) 

    SET @strquery = 'ALTER TABLE #temp ADD [' + @inc + '] FLOAT' 

    EXECUTE sp_executesql @strquery -- if @inc =1 then @strQuery : ALTER TABLE #temp ADD [1] FLOAT 

    SET @inc = @inc + 1 

END 

あなたはについての詳細を読むことができますArticle