C# temp proc的定义总是相同的,那么只要在EXEC('CREATE proc…)周围放置一个(如果不存在的话),然后删除EXEC('DROP…)。然后,如果第二个进程启动,它将共享全局temp proc,但数据将进入非共享的本地temp表:-).Hi

C# temp proc的定义总是相同的,那么只要在EXEC('CREATE proc…)周围放置一个(如果不存在的话),然后删除EXEC('DROP…)。然后,如果第二个进程启动,它将共享全局temp proc,但数据将进入非共享的本地temp表:-).Hi ,c#,sql,sql-server,C#,Sql,Sql Server,temp proc的定义总是相同的,那么只要在EXEC('CREATE proc…)周围放置一个(如果不存在的话),然后删除EXEC('DROP…)。然后,如果第二个进程启动,它将共享全局temp proc,但数据将进入非共享的本地temp表:-).Hi Srutzky.我不知道你是从哪里来的…我实际上使用exec调用超过1000次,可能有10次并行调用,效果很好。我很好奇,我根本没有执行drop…我相信当连接断开时,temp表和temp proc都会断开drops@srutzky我不确定全局t


temp proc的定义总是相同的,那么只要在
EXEC('CREATE proc…
)周围放置一个
(如果不存在的话)
,然后删除
EXEC('DROP…
)。然后,如果第二个进程启动,它将共享全局temp proc,但数据将进入非共享的本地temp表:-).Hi Srutzky.我不知道你是从哪里来的…我实际上使用exec调用超过1000次,可能有10次并行调用,效果很好。我很好奇,我根本没有执行drop…我相信当连接断开时,temp表和temp proc都会断开drops@srutzky我不确定全局temp的持久性是什么procs是。就像Fabio一样,在我看来,它在批处理后被清理,即使没有我的drop,这表明它可能没有与全局临时表相同的生存期和可见性规则。不过,我今天无法测试它,存在性检查可能是最安全的事情……这不是一个选项……我正在使用的系统需要额外的设置非临时对象的nal QA工作。如果使用的程序是临时的,审核员不必担心……谢谢anyway@TheFabio那很好。我只是给了另一个选择。它可能会帮助其他人,或者只是知道它的工作原理可能会在以后的其他事情上帮助你。但是作为记录,创建一个常规存储过程在
tempdb
中,由于每次服务器重新启动时都会重新构建
tempdb
,因此,如果SQL server的NT服务再次启动,则此进程创建的进程将不存在:-)。因此,虽然这可能不是官方的“临时”,但肯定不是永久性的。
CREATE Procedure #myTempProcedure(
  @param1 nvarchar(max)
) as 
begin
  insert #tempTable (col1, col2) select aCol, bCol from table2 where col2 = @param1;
end;


CREATE TABLE #tempTable
(col1 nvarchar(512),
(col2 nvarchar(512));

EXEC #myTempProcedure N'val1';
EXEC #myTempProcedure N'val2';
EXEC #myTempProcedure N'val3';
EXEC #myTempProcedure N'val4';

select col1, col2 from #tempTable;
EXEC('
    CREATE Procedure ##myTempProcedure(
        @param1 nvarchar(max)
    ) as 
    begin
      insert #tempTable (col1, col2) select aCol, bCol from table2 where col2 = @param1;
    end;
');


CREATE TABLE #tempTable
(
    col1 nvarchar(512),
    col2 nvarchar(512)
);

EXEC ##myTempProcedure N'val1';
EXEC ##myTempProcedure N'val2';
EXEC ##myTempProcedure N'val3';
EXEC ##myTempProcedure N'val4';

select col1, col2 from #tempTable;

EXEC('DROP PROC ##myTempProcedure;');