采用奇错误IF / else if语句(Odd error using IF/ELSE IF sta

2019-06-25 21:15发布

我试图创建依赖于一个场景参数的值,临时表并用下面的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

消息2714,级别16,状态1,179线已经有一个数据库名为“#TEMP”的对象。 消息2714,级别16,状态1,181线已经有一个数据库名为“#TEMP”的对象。 消息2714,级别16,状态1,183线已经有一个数据库名为“#TEMP”的对象。

我敢肯定基础上,@indexName变量的IF语句作品(有一些简单的替换块语句(例如,“选择@indexName”),该程序运行正常)。

关于是什么导致这个错误任何想法?

Answer 1:

由于只有记录上面的数字都不同。 你可以试试这个

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


Answer 2:

在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

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

干杯!



文章来源: Odd error using IF/ELSE IF statements