我在SQL Server中尝试了以下代码并遇到了一个奇怪的错误:
IF OBJECT_ID(N'tempdb..#t1') IS NULL
BEGIN
CREATE TABLE #t1(
F1 DATE NOT NULL
)
END
IF OBJECT_ID(N'tempdb..#t1') IS NULL
BEGIN
CREATE TABLE #t1(
F1 DATE NOT NULL
)
END
错误:
'#t1'存在。
我不知道为什么会出现这种错误?
答案 0 :(得分:2)
这是一个想法
IF OBJECT_ID(N'tempdb..#t1') IS NULL
BEGIN
CREATE TABLE #t1( F1 DATE NOT NULL )
END
GO
IF OBJECT_ID(N'tempdb..#t1') IS NULL
BEGIN
CREATE TABLE #t1( F1 DATE NOT NULL )
END
GO
答案 1 :(得分:1)
请改为尝试:
IF NOT exists(SELECT 1
FROM information_schema.columns
WHERE table_name LIKE '#t1%')
BEGIN
CREATE TABLE #t1(
F1 DATE NOT NULL
)
END
答案 2 :(得分:1)
试试这个:
IF Not EXISTS (select * from sys.objects where Name = 'tempdb..#t1')
BEGIN
CREATE TABLE #t1(
F1 DATE NOT NULL
)
END
答案 3 :(得分:1)
这不是运行时错误,它是“编译时”错误
--Drop table #t1 // call this alone to ensure that it's not existing, then call the rest, nothing will be printed
Print 0
IF OBJECT_ID('tempdb..#t1') IS NULL
BEGIN
Print 1
CREATE TABLE #t1(
F1 DATE NOT NULL
)
END
IF OBJECT_ID('tempdb..#t1') IS NULL
BEGIN
Print 2
CREATE TABLE #t1(
F1 DATE NOT NULL
)
END
答案 4 :(得分:1)
'#t1'
)的临时表。
相反,它添加一个后缀,使其长128个字符。所以你
找不到'#t1'
。您可以使用LIKE '#t1%'
查找。
IF NOT EXISTS (select * from tempdb.sys.tables where name like '#t1%')
GO
以标记批次结束。使用如下;
--DROP TABLE #t1
--GO
IF OBJECT_ID(N'tempdb..#t1') IS NULL
BEGIN
CREATE TABLE #t1(
F1 DATE NOT NULL
)
END
GO
IF NOT EXISTS(select * from tempdb.sys.tables where name like '#t1%')
BEGIN
CREATE TABLE #t1(
F1 DATE NOT NULL
)
END
答案 5 :(得分:1)
您的代码实际上很好,但SQL Server中存在限制,这意味着在查询优化阶段它将失败。请参阅答案here - why does sql server think a temp table already exists when it doesnt。