有条件地使用SQL临时表会引发错误

有条件地使用SQL临时表会引发错误,sql,sql-server,sql-server-2012,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 WHER

我有一个(未规范化的)遗留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也没有帮助。因此,我不得不在额外的存储过程中卸载工作,或者在条件语句中重复代码。为了可读性,我不喜欢这两个选项中的任何一个

在上述多个IF块中使用#Temp的任何方法(我确实有更多的IF条件,仅显示了2个条件来说明问题)


表1和表2是否具有相同的结构(列、数据类型)?@Lamak否,只有少数列是相同的。我编辑了这个问题来澄清这一点。我觉得奇怪的是,如果生成的
#Temp
表如此不同,那么其余的代码可能是相同的。如果10列相同,那么您可以列出这些列并创建精确的Temp表。我看不出有什么问题可以帮助找到答案。见下文。