tsql - 如果…ELSE…两个互斥插入INTO #temptable

标签 tsql if-statement sql-server-2012 compiler-errors temp-tables

我需要根据特定条件将记录的集合A或集合B插入#temptable中

我的伪代码:

IF OBJECT_ID('tempdb..#t1') IS NOT NULL DROP TABLE #t1;

IF {some-condition}
  SELECT {columns}
  INTO #t1 
  FROM {some-big-table}
  WHERE {some-filter}
ELSE
  SELECT {columns}
  INTO #t1
  FROM {some-other-big-table}
  WHERE {some-other-filter}

上面的两个SELECT是互斥的(由ELSE运算符保证)。但是,SQL编译器试图超越我,并抛出以下消息:
There is already an object named '#t1' in the database.

我“修复”的想法是先创建#t1,然后执行一个简单的INSERT INTO(而不是SELECT ... INTO)。但是我喜欢极简主义,并且想知道是否可以以更简单的方式实现这一点,即无需预先明确创建CREATE TABLE#t1。

顺便说一句,为什么在第一行的条件DROP TABLE上没有给我错误?就是想。

最佳答案

一个SQL批处理中不能有2个具有相同名称的临时表。 MSDN上的一篇文章说:“如果在单个存储过程或批处理中创建了多个临时表,则它们必须具有不同的名称”。您可以通过在IF-Else块外部声明2个不同的临时表或表变量/临时表来使用此逻辑。

关于tsql - 如果…ELSE…两个互斥插入INTO #temptable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43041815/

相关文章:

sql - 从当前月份获取前 12 个月的名称/ID

tsql - T-SQL如何在SELECT查询中运行过程/函数?

python - 嵌套的 Try/Except 或 If/Else - 如何判断使用哪个?

sql - 对一列进行求和并从其他列中随机选择数据的算法

c# - 在 IIS 上应用程序无法打开 SQL 连接

C# SQLCommand - 参数化查询被缩短

sql - 存储过程 WHERE LIKE ID 或 NAME

sql-server - SQL - 解析多列 XML 数据表

r - 否则分组数据中的行为会很奇怪

ios - 创建动态 if 语句