2016-12-04 53 views
1

我有一個SQL查詢是這樣的:而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 

我有錯誤是這樣的:

[錯誤] 42000 - [SQL服務器]附近有語法錯誤@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_'並將其他內容用作前綴 - 或者根本沒有前綴! –

回答

1

在SQL statment變量值不能提供作爲列名,實現這一點,你必須使用一個動態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 

你可以閱讀更多關於這裏的動態SQL查詢Article