我創建了一個存儲過程,其中包含許多存儲過程,即包裝過程。在包裝器存儲過程中刪除臨時表(SQL APS/PDW)
該過程並未完成,因爲臨時表在包裝程序中的不同存儲過程之間具有相同的名稱。
我需要找到一種方法來降包裝中的存儲過程之間的所有臨時表
或者
有一個大致的命令刪除所有臨時表,在每個存儲過程是內結束包裝。
環境是微軟SQL APS(PDW)
我創建了一個存儲過程,其中包含許多存儲過程,即包裝過程。在包裝器存儲過程中刪除臨時表(SQL APS/PDW)
該過程並未完成,因爲臨時表在包裝程序中的不同存儲過程之間具有相同的名稱。
我需要找到一種方法來降包裝中的存儲過程之間的所有臨時表
或者
有一個大致的命令刪除所有臨時表,在每個存儲過程是內結束包裝。
環境是微軟SQL APS(PDW)
這應該給你臨時的名單tables.Once你的列表,你可以選擇你所創造的東西,並使用動態SQL把它們一個接一個。
select * from tempdb.sys.objects where type='U'
您可以這樣做,在您的過程中檢查它們,然後放下它們。如果其他程序正在創建並使用它們但未完成它們,則這可能很危險。
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
你誤解了你的錯誤消息,不管它們是什麼。我做了以下。請注意,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
做你的臨時表實際上#啓動或##?或者你有真正的表格,你正在調用臨時表格。如果你有以#開頭的範圍有限的臨時表,這個問題不應該發生,因爲當proc超出範圍時它們被刪除。請提供錯誤信息的文本。 – HLGEM