首页 > 解决方案 > 数据库中已经有一个名为“#BaseData”的对象

问题描述

下面是我的代码片段。

我想根据变量过滤我的数据。

当我尝试运行代码时,它返回错误“数据库中已经有一个名为'#BaseData'的对象。”。我不确定为什么会这样;我已经在 IF 语句中进行了额外的检查,以删除临时表(如果它已经存在但无济于事)。

请问您能提供帮助或提供替代解决方案吗?

DECLARE @Variable AS VARCHAR(20) = 'Example1'

IF OBJECT_ID(N'TEMPDB..#BaseData') IS NOT NULL
DROP TABLE #BaseData

IF @Variable = 'Example1'
BEGIN
  
SELECT
            *
INTO
            #BaseData
FROM
            [Database].[schema].[table]

END

IF @Variable = 'Example2'
BEGIN
   
SELECT
            *
INTO
            #BaseData
FROM
            [Database].[schema].[table]
WHERE
            [column] = 1

END

IF @Variable = 'Example3'
BEGIN
    
SELECT
            *
INTO
            #BaseData
FROM
            [Database].[schema].[table]
WHERE
            [column] = 0

END

标签: sqlsql-server

解决方案


虽然代码是由 SQL 编译的,但在每个条件下都会创建相同的 #table,因此它不起作用。一种可能的解决方案是创建表,然后有条件地插入数据。

-- DROP TEMP TABLE IF EXISTS
IF OBJECT_ID(N'TEMPDB..#BaseData') IS NOT NULL
    DROP TABLE #BaseData
GO
  
-- CRATE TEMP TABLE WITH TempId, AND SAME STRUCTURE AS YOUR TABLE
SELECT TOP 0 CONVERT(INT, 0)TempId, * INTO #BaseData FROM TestTable

-- DECLARE VARIABLE
DECLARE @Variable AS VARCHAR(20)= 'Example1'

-- INSERT DATA IN TABLE DEPENDING FROM CONDITION
IF (@Variable = 'Example1')
BEGIN
    INSERT INTO #BaseData SELECT * FROM TestTable
END

IF (@Variable = 'Example2')
BEGIN
    INSERT INTO #BaseData SELECT * FROM TestTable  WHERE Id = 1
END

IF (@Variable = 'Example3')
BEGIN
    INSERT INTO #BaseData SELECT * FROM TestTable  WHERE Id = 2
END

推荐阅读