[英]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.