我有以下查询:
IF NOT EXISTS (SELECT 1
FROM sysobjects
WHERE id = Object_id('tempdb..TEMP_THETH_DETAILS'))
EXECUTE (
'CREATE TABLE tempdb..TEMP_THETH_DETAILS( THETH_ID NUMERIC(5) NOT NULL, LANGUAGE VARCHAR(3) DEFAULT ''EN'' NOT NULL)'
)
GO
问题是检查,似乎tempdb没有考虑,如果不存在,可能是因为表是在tempdb中创建的。
所以我的问题是有一种方法可以检查临时表是否存在或不是吗?
答案 0 :(得分:8)
试试这个:
IF object_id('tempdb..TEMP_THETH_DETAILS') is null
begin
EXECUTE
(
'CREATE TABLE tempdb..TEMP_THETH_DETAILS
( THETH_ID NUMERIC(5) NOT NULL,
LANGUAGE VARCHAR(3) DEFAULT ''EN'' NOT NULL
)'
)
end
go
答案 1 :(得分:0)
您可以在检查表存在时捕获异常,并在拦截异常时执行代码。
在Sybase中:
begin
declare SQLE_TABLE_NOT_FOUND EXCEPTION FOR SQLSTATE '42W33';
...
if exists(select 'x
from #tmpTable) then
-- TODO
endif;
-- at the end of the function if table not exists,
-- thrown exception is catched here
exception when SQLE_TABLE_NOT_FOUND then
-- TODO
end;
答案 2 :(得分:-2)
使用tempdb
GO
IF NOT EXISTS (SELECT 1
FROM sysobjects
WHERE id = Object_id('tempdb..TEMP_THETH_DETAILS'))
EXECUTE (
'CREATE TABLE tempdb..TEMP_THETH_DETAILS( THETH_ID NUMERIC(5) NOT NULL,
LANGUAGE VARCHAR(3) DEFAULT ''EN'' NOT NULL)'
)
GO