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

eyh26e7m  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(495)

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

但当我拿起围棋时,我面临着这样一个错误:
数据库中已存在名为“#deleted”的对象。

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

zsohkypk

zsohkypk1#

对的。如果要在同一批中使用select into语句和die语句,则必须为这两个临时表指定不同的名称。
或者,您可以先创建temp表,其中包含两个select语句所需的所有列,然后相应地调整selects(或使用temp表数据运行的任何语句)。
例如

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

相关问题