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

Tom*_*Tom 4 sql-server

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

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

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

消息2714,级别16,状态6,行1
数据库中已存在名为"odds_soccer"的对象.

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

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

Cha*_*kya 8

用于创建表格

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

对于删除现有表创建新表

IF Object_id('TEMPDB.schema_name.table', 'U') IS NOT NULL
    DROP TABLE table;
Run Code Online (Sandbox Code Playgroud)


Gio*_*sos 6

您的SELECT查询在'TheSchema'模式中查找表,而表通常是在默认模式中创建的dbo,因为CREATE语句中未指定模式名称.

请尝试使用此脚本:

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