在包装器存储过程中删除临时表(SQL APS / PDW)

时间:2016-11-15 18:13:23

标签: sql sql-server stored-procedures

我创建了一个存储过程,其中包含许多存储过程,即包装程序。

该过程未完成,因为在包装程序proc中的不同存储过程之间存在具有相同名称的临时表。

我需要找到一种方法来删除包装器

中存储过程之间的所有临时表

有一个通用命令可以在包装器内的每个存储过程的末尾删除所有临时表。

环境是Microsoft SQL APS(PDW)

3 个答案:

答案 0 :(得分:0)

这应该为您提供临时表的列表。一旦有了列表,您可以选择要创建的内容并使用动态sql逐个删除它们。

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

答案 1 :(得分: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

答案 2 :(得分: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。