【问题标题】:WHILE SQL Server error虽然 SQL Server 错误
【发布时间】:2017-04-18 21:23:46
【问题描述】:

我有一个这样的 SQL 查询:

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 新手,想知道这个问题的解决方案

提前致谢

【问题讨论】:

标签: sql-server while-loop


【解决方案1】:

ALTER TABLE my_table ADD @column INT

您需要使用链接中提到的执行语句。

WHILE @inc <= @totalrow
BEGIN
  exec ('ALTER table #temp add '+@inc+' FLOAT   set '+@inc+' = '+ @inc+'+1')
END

【讨论】:

  • @Jsnow 如果它有效,你必须接受这个答案。只需检查投票箭头下方的标记
【解决方案2】:

在 SQL 语句中,变量值不能作为列名提供,要实现这一点,您必须使用 动态 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 中阅读有关动态 SQL 查询的更多信息

【讨论】:

    猜你喜欢
    • 2014-11-22
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-06
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多