2015-12-03 102 views
0

我越來越想創建一個進程時,出現以下錯誤:錯誤在SQL Server中創建表IF

消息2714,級別16,狀態1,過程create_table_test,11號線
已經有數據庫中名爲'#tmp'的對象。

該過程正在創建基於IF語句的臨時表,但SQL Server無法識別create table語句在IF內部,並且只有一個將被執行。任何「乾淨」的方式呢?

create procedure [dbo].[create_table_test] 
AS 
BEGIN 
    set nocount on 

    if 1=1 
     create table #tmp (field1 int) 
    else 
     create table #tmp (field1 varchar(10)) 
end 
+3

表結構不同,所以關於使用不同的名稱爲第二臨時表怎麼樣? – DeanOC

回答

0

如果您很樂意使用全局臨時表,那麼您可以將表創建爲兩個過程。這樣SQL解析器不會感到困惑。

create procedure [dbo].[create_tmpint] 
AS 
BEGIN 

    set nocount on 
    create table ##tmp (field1 int) 

end 
go 


drop procedure create_tmpvar 
go 
create procedure [dbo].[create_tmpvar] 
AS 
BEGIN 

    set nocount on 
    create table ##tmp (field1 varchar(10)) 

end 
go 

drop procedure create_table_test 
go 
create procedure [dbo].[create_table_test] 
AS 
BEGIN 

    set nocount on 

    if 1=1 begin 
     exec [dbo].[create_tmpint] 
    end  
    else 
     exec [dbo].[create_tmpvar] 


    insert into ##tmp values(1) 

    select * from ##tmp 

end 
go 

如果運行exec [dbo].[create_table_test]您將獲得價值1返回。

0

您可以使用此代碼:

CREATE TABLE #tmp (tempColumn int) 

IF 1=1 
    ALTER TABLE #tmp ADD field1 int 
ELSE 
    ALTER TABLE #tmp ADD field1 varchar(10) 

ALTER TABLE #tmp DROP COLUMN tempColumn