繁体   English   中英

如果条件在动态SQL中不起作用

[英]If condition not working inside dynamic sql

在下面的动态SQL中,我尝试检查临时表(#Table)是否已经存在,如果不存在,则使用其他表进行创建。

但是我的问题是,无论IF条件中的值是多少,如果条件为if,我总是会出错

数据库中已经有一个名为“ #Table”的对象。

下面是sql代码。

declare @sqlstring varchar(max)

set @sqlstring=N'

select * into #Table from mst_country


if(object_id(''tempdb..#Table'') is null)
begin

    select * into #Table from mst_country_bkp

end'

exec(@sqlstring)

有人可以让我们知道为什么会发生这种情况吗?

完成查询后,需要删除临时表,如下所示:

declare @sqlstring varchar(max)

set @sqlstring=N'
IF OBJECT_ID(''tempdb.dbo.#Table'', ''U'') IS NOT NULL
DROP TABLE #Table;  

select * into #Table from mst_country


if(object_id(''tempdb..#Table'') is null)
begin  
    select * into #Table from mst_country_bkp    
end'

exec(@sqlstring)

编辑:

问题是,同一sql语句中不能有两个SELECT INTO。 这是SQL 6.5的一个遗留项,它没有延迟的名称解析。 尝试这个:

declare @sqlstring varchar(max)

set @sqlstring=N'
IF OBJECT_ID(''tempdb.dbo.#Table'', ''U'') IS NOT NULL
DROP TABLE #Table;  

select * into #Table from mst_country

insert into #Table(col1,col2,....)
select col1,col2,.... from mst_country_bkp    
end'

exec(@sqlstring)

编译sqlserver时,不允许您在同一范围内两次创建同一临时表。 实际上,您可以像这样欺骗sqlserver,因此不会意识到临时表已经创建:

declare @sqlstring varchar(max)

set @sqlstring=N'

exec(''select * into #Table from mst_country'')


if(object_id(''tempdb..#Table'') is null)
    select * into #Table from mst_country_bkp
'

exec(@sqlstring)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM