2016-12-04 55 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