IF...ELSE...两个互斥插入 INTO #temptable
IF... ELSE... two mutually exclusive inserts INTO #temptable
我需要根据特定条件将记录集 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.
我对 "fixing" 的想法是预先创建 #t1,然后执行简单的 INSERT INTO(而不是 SELECT...INTO)。但我喜欢极简主义,想知道这是否可以通过更简单的方式实现,即无需显式 CREATE TABLE #t1 upfront.
顺便说一句,为什么它在第一行的条件 DROP TABLE 上没有给我一个错误?只是想知道。
在单个 SQL 批次中不能有 2 个名称相同的临时 table。其中一篇 MSDN 文章说 "If more than one temporary table is created inside a single stored procedure or batch, they must have different names"。您可以使用 2 个不同的 temp tables 或 table variable/temp table 在 IF-Else 块外声明此逻辑。
使用动态 sql 我们可以处理这种情况。作为开发人员,这不是一个好习惯。最好使用 table 变量或临时 table.
IF 1=2
BEGIN
EXEC ('SELECT 1 ID INTO #TEMP1
SELECT * FROM #TEMP1
')
END
ELSE
EXEC ('SELECT 2 ID INTO #TEMP1
SELECT * FROM #TEMP1
')
我需要根据特定条件将记录集 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.
我对 "fixing" 的想法是预先创建 #t1,然后执行简单的 INSERT INTO(而不是 SELECT...INTO)。但我喜欢极简主义,想知道这是否可以通过更简单的方式实现,即无需显式 CREATE TABLE #t1 upfront.
顺便说一句,为什么它在第一行的条件 DROP TABLE 上没有给我一个错误?只是想知道。
在单个 SQL 批次中不能有 2 个名称相同的临时 table。其中一篇 MSDN 文章说 "If more than one temporary table is created inside a single stored procedure or batch, they must have different names"。您可以使用 2 个不同的 temp tables 或 table variable/temp table 在 IF-Else 块外声明此逻辑。
使用动态 sql 我们可以处理这种情况。作为开发人员,这不是一个好习惯。最好使用 table 变量或临时 table.
IF 1=2
BEGIN
EXEC ('SELECT 1 ID INTO #TEMP1
SELECT * FROM #TEMP1
')
END
ELSE
EXEC ('SELECT 2 ID INTO #TEMP1
SELECT * FROM #TEMP1
')