【问题标题】:Temp table not being created临时表未创建
【发布时间】:2014-08-08 14:42:18
【问题描述】:

我正在尝试在以下代码中创建 2 个临时表。虽然我的条件是从 else 语句创建临时表,但对于 tmp2 来说,表已经创建。我这样做是因为我想合并 2 个临时表中的数据,无论它是否有数据。

无论以下查询中的 else 条件如何,以下脚本都不会创建 ##tmp2 表...

DECLARE @@TOTALCOUNT  INT 
DECLARE @@DECRIPTION VARCHAR(100)
DECLARE @@ST VARCHAR(100)
DECLARE @@ZP VARCHAR(100)
DECLARE @@CT VARCHAR(100)
DECLARE @@GN  VARCHAR(100)

SET @@ST = 'IA'
SET @@CT = 'JOHNSTON'
SET @@ZP = '50131'
SET @@GN = 'FEMALE'

BEGIN TRY
    DROP TABLE ##TMP1;
    DROP TABLE ##TMP2;          

END TRY

BEGIN CATCH

    SET @@DECRIPTION =  ' VEHICLES ARE SOLD DURING LAST 3  MONTHS '

    SET @@TOTALCOUNT = ( SELECT COUNT(*)  FROM [TALK TRACK RAP].DBO.CARSEXCEL
    WHERE [SALE_DATE] >  DATEADD( DAY, -90 ,CONVERT (DATE , '01/01/2013',103)) 
    AND [SALE_DATE] < CONVERT (DATE , '01/01/2013',103)) ;

    SELECT  MAKE , ( (100 * COUNT(*)) /@@TOTALCOUNT ) CN , 
    CONVERT(VARCHAR, ( (100 * COUNT(*)) /@@TOTALCOUNT ))+ ' % ' + MAKE + @@DECRIPTION AS TALK INTO ##TMP1
    FROM [TALK TRACK RAP].DBO.CARSEXCEL
    WHERE [SALE_DATE] >  DATEADD( DAY, -90 ,CONVERT (DATE , '01/01/2013',103)) 
    AND [SALE_DATE] < CONVERT (DATE , '01/01/2013',103)
    GROUP BY MAKE 
END CATCH


IF @@ST IS NULL
BEGIN

    SET @@TOTALCOUNT = (SELECT COUNT(*) FROM [TALK TRACK RAP].DBO.CARSEXCEL
    WHERE [SALE_DATE] >  DATEADD( DAY, -90 ,CONVERT (DATE , '01/01/2013',103)) 
    AND [SALE_DATE] < CONVERT (DATE , '01/01/2013',103)
    AND  STATE= @@ST  )

    SET @@DECRIPTION =  ' VEHICLES ARE SOLD DURING LAST 3  MONTHS IN ' +  @@ST+ ' STATE '

    SELECT  MAKE , ( (100 * COUNT(*)) / @@TOTALCOUNT ) CN ,
    CONVERT(VARCHAR, ( (100 * COUNT(*)) /@@TOTALCOUNT ))+ ' % ' +MAKE + @@DECRIPTION  AS TALK INTO ##TMP2
    FROM [TALK TRACK RAP].DBO.CARSEXCEL
    WHERE [SALE_DATE] >  DATEADD( DAY, -90 ,CONVERT (DATE , '01/01/2013',103)) 
    AND [SALE_DATE] < CONVERT (DATE , '01/01/2013',103)
    AND  STATE= @@ST
    GROUP BY MAKE ;
END 

if @@ST IS NOT NULL
BEGIN

    IF EXISTS ( SELECT * FROM sys.tables WHERE name LIKE '##TMP2%' ) 
    DROP TABLE ##TMP2
    CREATE TABLE ##TMP2 (MAKE VARCHAR(30), CN VARCHAR(30), TALK VARCHAR(30))
END

我该如何解决这个问题?

【问题讨论】:

标签: sql sql-server plsqldeveloper


【解决方案1】:

临时表不会出现在 sys.tables 中。这是测试临时表的简单方法:

IF OBJECT_ID('tempdb..#TMP2') IS NOT NULL DROP TABLE #TMP2
GO

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-06
    • 2019-09-09
    • 1970-01-01
    • 2014-12-16
    • 2019-03-13
    • 1970-01-01
    • 2013-11-15
    • 1970-01-01
    相关资源
    最近更新 更多