繁体   English   中英

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

[英]How to drop temporary table in Stored Procedure

我正在使用 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

但是当我拿起GO时,我遇到了这个错误:

数据库中已经有一个名为“#deleted”的 object。

我的代码并显示错误

如果我想用这种语法创建一个 SP,我不能使用 GO。

正确的。 如果要使用 SELECT INTO 语句在同一批次中使用它们,则必须为 2 个临时表指定不同的名称,并在其间使用 DIE 语句。

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

例如

BEGIN
    DROP TABLE IF EXISTS #deleted ;
    CREATE TABLE #deleted ( [one] VARCHAR(5) NULL, [two] VARCHAR(5) NULL ) ;

    INSERT  INTO #deleted ( [one] )
    SELECT 'a' AS [one] ;

    INSERT  INTO #deleted ( [two] )
    SELECT  'b' AS [two] ;

    SELECT [one] FROM #deleted WHERE [two] IS NULL ;
    SELECT [two] FROM #deleted WHERE [one] IS NULL ;

    DROP TABLE IF EXISTS #deleted ;
END
GO

更新 1
如前所述,您可以为临时表指定不同的名称。

例如

BEGIN
    SELECT  'a' AS [one]
    INTO    #deleted1 ;
    SELECT  * FROM #deleted1 ;  -- or whatever statements you need to execute
    DROP TABLE IF EXISTS #deleted1 ;

    SELECT  'b' AS [two]
    INTO    #deleted2 ;
    SELECT  * FROM #deleted2 ;  -- or whatever statements you need to execute
    DROP TABLE IF EXISTS #deleted2 ;
END
GO

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM