【发布时间】: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
我该如何解决这个问题?
【问题讨论】:
-
您的意思是使用全局临时表吗? stackoverflow.com/questions/2920836/…
标签: sql sql-server plsqldeveloper