sql - 数据库中已经有一个名为“#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
解决方案
虽然代码是由 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
推荐阅读
- javascript - 实时更新多边形传单
- apache-camel - 日期未在骆驼简单表达式中解析
- c# - 角落有小三角形的文本框
- java - 增加 G1GC XX:ParallelGCThreads 有什么影响?
- html - 如何使用 CSS 在嵌套无序列表中保持第二行的缩进?
- ios - 如何根据在 UITableViewCell 中点击的单元格进行判断?
- java - JavaFX ScrollPane PickOnBounds(部分鼠标透明度)
- excel - how to write an if statement code to compare two cell's value in one sheet to another cell in another sheet
- xml - 将XML加载到vb.net中的表时如何将时间更改为本地时间
- html - How can I stop my other DIVs from moving when I expand on hover