由於無法達成,所以改成create temp table (#xxxTable)的方式然後依不同原則再用alter table drop column 的方式來做
寫在這篇 if .. else .. create table variable
今天在想,用temp table的方式除了是否因為有transaction可能會有performance的考量外, 如果是多人同時間呼叫 sp時, temp table的欄位數和資料內容會不會發瘋??
所以自己做了一個小小的測試, 用二個不同的session來執行以下的sp
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[zspBev]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[zspBev]
GO
create procedure zspBev (@type int)
as
begin
IF EXISTS (SELECT * FROM tempdb.sys.objects WHERE object_id = OBJECT_ID(N'tempdb..#tmpTable') AND type in (N'U'))
drop table #tmpTable
create table #tmpTable
(col1 int,col2 int)
begin transaction t1
if @type = 1
begin
insert into #tmpTable values(1,2)
commit transaction t1
WAITFOR DELAY '00:00:05';
select * from #tmpTable
end
else
begin
insert into #tmpTable values(3,4)
commit transaction t1
WAITFOR DELAY '00:00:10';
select * from #tmpTable
end
select * from #tmpTable
end
看來彼此間是不會影響到的.
在tempdb中查看Temporary Tables目錄下的物件,同時間會有二個#tmpTable開頭的物件,但往後仔細看物件名稱, sql server自己已經有所區別,只是table名稱係漏漏等....
dbo.#tmpTable________________________________________________________________________________________________________000000000036
dbo.#tmpTable________________________________________________________________________________________________________000000000037
所以....就別擔心太多了
沒有留言:
張貼留言