使用IF/ELSE IF语句的奇数错误

Chr*_*ris 4 sql t-sql sql-server-2008-r2

我正在尝试创建一个依赖于scenario参数值的临时表,并使用以下IF语句,但得到以下错误:

    IF @indexName = 'A'
        begin select top 400 * into #temp from #pretemp order by EMRev desc end
    ELSE IF @indexName = 'B'
        begin select top 75 * into #temp from #pretemp order by EMRev desc end
    ELSE IF @indexName = 'C'
        begin select top 300 * into #temp from #pretemp order by EMRev desc end
    ELSE 
        begin select top 100 * into #temp from #pretemp order by EMRev desc end
Run Code Online (Sandbox Code Playgroud)

消息2714,级别16,状态1,行179数据库中已存在名为"#temp"的对象.消息2714,级别16,状态1,行181数据库中已存在名为"#temp"的对象.消息2714,级别16,状态1,行183数据库中已存在名为"#temp"的对象.

我确定IF语句基于@indexName变量工作(用简单的东西替换block语句(例如,'select @indexName'),程序运行正常).

有关导致此错误的原因的任何想法?

Jam*_* L. 9

SQL解析器查找可能创建临时表的所有位置,并且仅允许一次使用给定的临时表名称.解决方案是做这样的事情:

select * into #temp from #pretemp where 1=2

IF @indexName = 'A'
    begin insert into #temp select top 400 * from #pretemp order by EMRev desc end
ELSE IF @indexName = 'B'
    begin insert into #temp select top 75 * from #pretemp order by EMRev desc end
ELSE IF @indexName = 'C'
    begin insert into #temp select top 300 * from #pretemp order by EMRev desc end
ELSE 
    begin insert into #temp select top 100 * from #pretemp order by EMRev desc end
Run Code Online (Sandbox Code Playgroud)

where 1=2零个记录创建表结构......然后if语句填充临时表.

干杯!


Eri*_*icZ 4

因为只有前几条记录存在差异。你可以试试这个

declare @num int 

SET @num = CASE @indexName 
                    WHEN 'A' THEN 400
                    WHEN 'B' THEN 75
                    WHEN 'C' THEN 300
                    ELSE  100
            END

select top (@num) * into #temp from #pretemp order by EMRev desc
Run Code Online (Sandbox Code Playgroud)