2016-11-15 51 views
1

我創建了一個存儲過程,其中包含許多存儲過程,即包裝過程。在包裝器存儲過程中刪除臨時表(SQL APS/PDW)

該過程並未完成,因爲臨時表在包裝程序中的不同存儲過程之間具有相同的名稱。

我需要找到一種方法來降包裝中的存儲過程之間的所有臨時表

或者

有一個大致的命令刪除所有臨時表,在每個存儲過程是內結束包裝。

環境是微軟SQL APS(PDW)

+0

做你的臨時表實際上#啓動或##?或者你有真正的表格,你正在調用臨時表格。如果你有以#開頭的範圍有限的臨時表,這個問題不應該發生,因爲當proc超出範圍時它們被刪除。請提供錯誤信息的文本。 – HLGEM

回答

0

這應該給你臨時的名單tables.Once你的列表,你可以選擇你所創造的東西,並使用動態SQL把它們一個接一個。

select * from tempdb.sys.objects where type='U' 
0

您可以這樣做,在您的過程中檢查它們,然後放下它們。如果其他程序正在創建並使用它們但未完成它們,則這可能很危險。

If Object_ID('tempdb..#yourTempTable') Is Not Null 
    Drop Table #yourTempTable 

或生成下降命令,您可以使用此:

Select 'Drop table tempdb..' + Name From tempdb.sys.objects where type = 'U' and is_ms_shipped = 0 
0

你誤解了你的錯誤消息,不管它們是什麼。我做了以下。請注意,sp1和sp2都創建一個名爲#t1的表。

ALTER PROCEDURE [dbo].[sp1] 
AS 
BEGIN 
    SET NOCOUNT ON; 
    create table #t1(id integer); 
    insert into #t1 
    SELECT 1 record; 

    select id from #t1; 
END 

ALTER PROCEDURE [dbo].[sp2] 

AS 
BEGIN 
    SET NOCOUNT ON; 

    create table #t1(id integer); 
    insert into #t1 
    SELECT 2 record; 

    select id from #t1; 
END 
GO 

alter PROCEDURE sp3 

AS 
BEGIN 
    SET NOCOUNT ON;  
    declare @t1 as table (id integer); 

    insert into @t1 
    exec sp1; 
    insert into @t1 
    exec sp2; 

    select id from @t1; 
END 
GO 

而現在的重大考驗。這

exec sp3 

回報兩排,用值1和2