我试图创建依赖于一个场景参数的值,临时表并用下面的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”),该程序运行正常)。
关于是什么导致这个错误任何想法?
由于只有记录上面的数字都不同。 你可以试试这个
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
在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语句填充临时表。
干杯!