Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在存储过程中删除临时表_Sql_Sql Server_Stored Procedures_Temp Tables - Fatal编程技术网

Sql 如何在存储过程中删除临时表

Sql 如何在存储过程中删除临时表,sql,sql-server,stored-procedures,temp-tables,Sql,Sql Server,Stored Procedures,Temp Tables,我正在使用SQL Server 2016 Service Pack 2并使用以下代码。它在SQL查询语句中正确执行: SELECT 'a' AS one INTO #deleted; DROP TABLE IF EXISTS #deleted; GO SELECT 'b' AS two INTO #deleted; DROP TABLE IF EXISTS #deleted; GO 但当我拿起围棋时,我面临着这个错误: 数据库中已存在名为“已删除”的对象 如果要使用此语法创建SP,则无法使用

我正在使用SQL Server 2016 Service Pack 2并使用以下代码。它在SQL查询语句中正确执行:

SELECT 'a' AS one INTO #deleted;
DROP TABLE IF EXISTS #deleted;
GO

SELECT 'b' AS two INTO #deleted;
DROP TABLE IF EXISTS #deleted;
GO
但当我拿起围棋时,我面临着这个错误:

数据库中已存在名为“已删除”的对象


如果要使用此语法创建SP,则无法使用GO。

正确。如果要在同一批中使用SELECT INTO语句(中间有DIE语句),则必须为这两个临时表指定不同的名称

或者,您可以先创建临时表,其中包含两个SELECT语句所需的所有列,然后相应地调整SELECTs语句或使用临时表数据运行的任何语句

例如

开始 删除表(如果存在); 创建表删除[1]VARCHAR5 NULL,[2]VARCHAR5 NULL; 插入已删除的[一] 选择“a”作为[一]; 插入已删除的[两] 选择“b”作为[两个]; 从删除中选择[1],其中[2]为空; 从删除中选择[2],其中[1]为空; 删除表(如果存在); 终止 去 更新1 如前所述,您可以为临时表指定不同的名称

例如

开始 选择“a”作为[一个] 进入删除1; 从deleted1中选择*或者任何你需要执行的语句 删除表格(如果存在)删除1; 选择“b”作为[两个] 进入删除2; 从deleted2中选择*或者任何你需要执行的语句 删除表格(如果存在); 终止 去
谢谢你的回复;我的列数非常多,您的方法对我来说效率不高。难道没有更简单的方法吗?我需要知道如何删除存储过程中的每个批?最好不要无缘无故地盲目应用模式。为什么在您的过程中需要使用临时表?为这一决定辩护。为什么要使用惰性的表创建形式?由于编码风格的原因,似乎更像是一个自作自受的问题。