SQL Server:检查表是否存在,否则创建它

时间:2017-03-02 15:56:49

标签: sql-server

我有这个代码我从MySQL转换:

IF NOT EXISTS (SELECT * 
               FROM INFORMATION_SCHEMA.TABLES 
               WHERE TABLE_SCHEMA = 'TheSchema' 
                 AND TABLE_NAME = 'odds_soccer') 
    CREATE TABLE "odds_soccer" (...)

唯一的问题是......如果我尝试运行两次,它将第二次出错,错误

  

Msg 2714,Level 16,State 6,Line 1
  数据库中已经有一个名为“odds_soccer”的对象。

因为我实际上在SO处找到了我的解决方案,所以我不确定为什么代码不起作用。

我目前正在运行它作为Microsoft SQL Server Management Studio中选择了我的数据库的查询。

3 个答案:

答案 0 :(得分:8)

用于创建表格

EncryptCustomerLookup

删除现有表创建新表

IF NOT EXISTS (SELECT 'X'
                   FROM   INFORMATION_SCHEMA.TABLES
                   WHERE  TABLE_NAME = 'table_name'
                          AND TABLE_SCHEMA = 'schema')
BEGIN
    create..
END

答案 1 :(得分:6)

您的SELECT查询在'TheSchema'架构中查找表,而该表是在默认架构中创建的,通常为dbo,因为CREATE中未指定架构名称1}}陈述。

请尝试使用此脚本:

IF NOT EXISTS (SELECT * 
               FROM INFORMATION_SCHEMA.TABLES 
               WHERE TABLE_SCHEMA = 'TheSchema' 
                 AND TABLE_NAME = 'odds_soccer') 
    CREATE TABLE [TheSchema].odds_soccer (...)

答案 2 :(得分:1)

相当惊讶,因为它应该工作,但它可能取决于SQL-Server版本。

目前我正在使用这样的脚本:

DECLARE @SchemaID int = (SELECT schema_id FROM sys.schemas WHERE name = 'X')

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Y' AND schema_id = @SchemaID)
BEGIN
    CREATE TABLE...
END
GO

但基本上是一样的。

相关问题