2015-12-03 80 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