在SQL Server中的CREATE TABLE IF NOT EXISTS相当于什么?

250

CREATE TABLE IF NOT EXISTS 在 MySQL 中可行,但在 SQL Server 2008 R2 中会失败。相应的语法是什么?


1
http://justcheckingonall.wordpress.com/2008/03/01/how-to-create-table-in-mssql-only-if-it-does-not-exist/ - Daniel Hilgarth
13
实际上,这不是标记问题的重复。 这个问题正在询问如何在不存在时创建。因为我们需要在创建之后使用GO,所以我们不能将创建命令放在 BEGINEND 块中,就像其他问题的答案建议的那样。 - Bistro
2
@JNK,当您将此问题标记为基础问题时,您的链接可能位于搜索结果的顶部。然而,在今天,这个问题已经成为谷歌搜索的首选。 - Bistro
如果不存在(选择*从INFORMATION_SCHEMA.TABLES where TABLE_NAME=YOUR TABLE NAME'),则开始//DO YOUR STUFF// end - Hadi
4
这个问题被关闭,因为它被认为是另一个问题的副本。关闭背后的逻辑类似于反向的XY 问题。你在告诉提问者他们应该问Y,而他们实际上正在问X(与 XY 问题不同,提问者在尝试解决X时询问Y)。也就是说,提问者做得没错,但问题还是被关闭了。难过的表情 - binki
显示剩余5条评论
1个回答

272
if not exists (select * from sysobjects where name='cars' and xtype='U')
    create table cars (
        Name varchar(64) not null
    )
go

如果表格不存在,则以上代码将创建一个名为cars的表格。


50
最好使用特定的 sys.tables 目录视图,而不是要记住表格是什么晦涩的 xtype... - marc_s
78
由于这是谷歌上此主题的热门问题,即使它已经关闭:if not exists (select * from sys.tables t join sys.schemas s on (t.schema_id = s.schema_id) where s.name = 'myschema' and t.name = 'cars') create table myschema.cars ( Name varchar(64) not null )。如果不存在(名称为'myschema'和'tables'的表中),则创建一个名为'myschema.cars'的新表,其中包含一个名为“Name”的varchar类型列(不允许为空)。 - bart
114
回到2017年的这个问题:IF OBJECT_ID(N'dbo.Cars', N'U') IS NULL BEGIN CREATE TABLE dbo.Cars (Name varchar(64) not null); END; - hastrb
13
@hastrb,我认为你应该将你的评论转换成一个答案 ;) - MaxU - stand with Ukraine
7
请把你的回答单独作为一个回复,而不是放在评论中。这样更加合理和优雅,并且经过多年的实践,专业开发人员一直在寻找这个隐藏的解决方案。谢谢。 - sanpat
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接