我在 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' 存在。
我不知道为什么会出现这个错误?
我在 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' 存在。
我不知道为什么会出现这个错误?
这是想法
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
'#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
您的代码实际上很好,但是 SQL Server 中存在一个限制,这意味着在查询优化阶段它会失败。请在此处查看答案 - 为什么 sql server 认为临时表已经存在而不存在。
这不是运行时错误,而是“编译时”错误
--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
试试这个:
IF NOT exists(SELECT 1
FROM information_schema.columns
WHERE table_name LIKE '#t1%')
BEGIN
CREATE TABLE #t1(
F1 DATE NOT NULL
)
END
试试这个:
IF Not EXISTS (select * from sys.objects where Name = 'tempdb..#t1')
BEGIN
CREATE TABLE #t1(
F1 DATE NOT NULL
)
END