您好我有一个临时表,我试图根据where条件插入记录,但它会抛出一个已经存在的错误。 我试图更改名称,但这不是问题,因为临时表在会话结束时被删除。
我认为我正在编写查询。
SELECT [Name]
INTO #TEMP_REJECT
FROM #TEMP_VALIDATION
WHERE Name = @Name
我正在尝试从#TEMP_VALIDATION
插入#TEMP_REJECT错误消息
“数据库中已有一个名为'#TEMP_REJECT'的对象。”
请建议。
感谢您的帮助。 [R
答案 0 :(得分:4)
这个答案将帮助您: official documentation
简而言之:INSERT INTO
创建表格然后插入记录。
#TEMP_REJECT
仅插入记录。
因此,在您的情况下,由于SELECT INTO
已经存在,INSERT INTO
会被拒绝,因为它无法再次创建表格,因此您必须在SELECT INTO
之后使用IF OBJECT_ID('tempdb..#TEMP_REJECT') IS NOT NULL
BEGIN
INSERT INTO #TEMP_REJECT
SELECT [Name]
FROM #TEMP_VALIDATION
WHERE Name = @Name
END
ELSE
BEGIN
SELECT [Name]
INTO #TEMP_REJECT
FROM #TEMP_VALIDATION
WHERE Name = @Name
END
。
import React from "react";
import ReacrDOM from "react-dom";
import {Router, Route, IndexRoute, hashHistory} from "react-router"
import {Provider} from "react-redux";
import store from "./store";
import Layout from "./pages/Layout";
import Dashboard from "./pages/Dashboard";
import Login from "./pages/login/index";
import User from "./pages/user/index";
import EnsureLoggedIn from "./EnsureLoggedIn";
const app = document.getElementById("app");
ReacrDOM.render(
<Provider store={store}>
<Router history={hashHistory}>
<Route path="/login" component={Login}/>
<Route component={EnsureLoggedIn}>
<Route path="/" component={Layout}>
<IndexRoute component={Dashboard}/>
<Route path="user" component={User}/>
</Route>
</Route>
</Router>
</Provider>
, app);
参考文献:
https://stackoverflow.com/a/8560644/3635715
INTO Clause
答案 1 :(得分:2)
如果表不存在,SQL Server将不会告诉您表。
我建议您添加
IF OBJECT_ID('tempdb..#TEMP_REJECT') IS NOT NULL
DROP TABLE #TEMP_REJECT
在您的select语句前面。这保证了执行select时临时表不存在。
所以你的陈述变成了
IF OBJECT_ID('tempdb..#TEMP_REJECT') IS NOT NULL
DROP TABLE #TEMP_REJECT
SELECT [Name]
INTO #TEMP_REJECT
FROM #TEMP_VALIDATION
WHERE Name = @Name
答案 2 :(得分:1)
在插入
之前尝试检查如果object_id('tempdb ..#TEMP_REJECT')不为null 删除表#TEMP_REJECT
SELECT [Name]
INTO #TEMP_REJECT
FROM #TEMP_VALIDATION
WHERE Name = @Name
如果SQL说有临时表,那么在插入之前必须有一个表
答案 3 :(得分:1)
我注意到在同一SQL Server选项卡/文件中连续工作时会遇到相同的错误。
例如,我有一个大型SQL文件,该文件用于使用临时表执行一系列更新。当我连续执行它时,它会错误地抱怨我的#tempTable已经存在(即使我使用DeanOC描述的“如果该表存在,也要删除它”语句)。
在连续运行之间退出文件/选项卡即可解决此问题。
如果这对您的用例造成了问题,建议您将语句捆绑到存储的proc中,并在其中实现DeanOC的放置逻辑。