我有一个(未规范化的)遗留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个用于说明问题)。