有条件地使用SQL Temp Table会引发错误

时间:2014-04-24 15:08:03

标签: sql sql-server sql-server-2012

我有一个(未规范化的)遗留SQL数据库,我正在处理从几个类似表中的一个收集代码的任务。我想对#Temp表执行许多相同的代码,但它绘制的表格非常不同(有些列是相同的)。

我的代码是:

IF @Variable = 'X'
BEGIN
   SELECT * INTO #Temp FROM TABLE1 WHERE Condition1 = @Condition
END

IF @Variable = 'Y'
BEGIN
   SELECT * INTO #Temp FROM TABLE2 WHERE Condition1 = @Condition
END

此时,我执行了一些常用代码。有很多,我想只使用#Temp,没有另一个IF条件与多次复制的代码。我不能提前宣布表格(它非常宽 - 而且它们不一样)而且我无法真正规范化数据库(遗留系统远远不够'成熟'而且我的时间范围很小)。此外,在查询结束时,#Temp表用于在原始表中创建新行(因此,我不能只声明公共部分)。

此时,我无法进行存储过程,因为

  

数据库中已经有一个名为'#Temp'的对象。

此错误突出显示第二个IF块。在IF块中添加DROP TABLE #Temp也无济于事。因此,我不得不在其他SPROC中卸载工作或在条件语句中重复代码。为了便于阅读,我不喜欢这两种选择。

如上所述,在多个IF块中使用#Temp的任何方式(我真的有更多的IF条件,只有2个用于说明问题)。

Example SqlFiddle

0 个答案:

没有答案