Sql 临时表存在性检查
我在SQL Server中尝试了以下代码,但遇到了一个奇怪的错误:Sql 临时表存在性检查,sql,sql-server,Sql,Sql Server,我在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 O
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
请尝试以下方法:
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
这不是运行时错误,而是“compiletime”错误
- SQL Server不存储具有给定名称的临时表(
)。 相反,它添加了一个后缀,使其长度为128个字符。所以你 找不到“#t1”
“#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中存在一个限制,这意味着在查询优化阶段它将失败。请查看答案。在执行第一个create table之前,似乎正在评估IF子句,如果在第一个IF…END之后放置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