我有一个存储过程,其中INSERT INTO
if
块中有两个else
语句,一个发生在if
,另一个发生在else
,所以他们不会发生冲突。但是在编译时,从其他部分的编译中,它已经有一个名为'#xxx'的对象,尽管它前面有一个drop语句。
IF OBJECT_ID('tempdb..#xxx') IS NOT NULL
DROP TABLE #xxx
SELECT *
INTO #xxx
FROM FamilyDetails_tbl FD(NOLOCK)
有人可以帮忙吗?
答案 0 :(得分:1)
将select
语句放入exec
命令中,如下所示:
exec('SELECT *
INTO #xxx
FROM FamilyDetails_tbl FD(NOLOCK)')
答案 1 :(得分:0)
您可以在Transact-SQL批处理中使用命令字符串或字符串。
IF OBJECT_ID('tempdb..#xxx') IS NOT NULL
EXEC ('SELECT 1 AS Col1 INTO #xxx') -- IF condition
ELSE
EXEC ('SELECT 2 AS Col2 into #xxx') -- ELSE condition
答案 2 :(得分:0)
您是否尝试在tempdb前添加“N”,如下所示: 如果OBJECT_ID(N'tempdb ..#xxx')IS NOT NULL
答案 3 :(得分:0)
它会像ydoow上面用EXEC命令建议的那样工作,但是如果你在那个特定的数据库中没有EXEC权限,那么只能选择如下所示。
IF('条件') 开始 IF OBJECT_ID('tempdb ..#xxx')IS NOT NULL DROP TABLE #xxx 选择 * INTO #xxx 从表1 什么'有些条件' 结束 其他 开始 IF OBJECT_ID('tempdb ..#xxx')IS NOT NULL DROP TABLE #xxx 选择 * INTO #xxx 从表1 什么'有些条件' END