Подтвердить что ты не робот

Как получить таблицу в базе данных, используя MS SQL 2008?

Я хочу проверить, существует ли таблица в базе данных, и если она не существует, чтобы создать ее. Как я могу получить список всех таблиц в текущей базе данных?

Я мог бы получить список базы данных с помощью SELECT следующим образом:

SELECT * FROM sys.databases

Осталось создать таблицу, если она не существует.

Я также попытался создать таблицы одновременно с базой данных следующим образом:

if not exists(select * from sys.databases where name = 'db')
begin 
    create database [db]
    use [db];
    create table [test] (
         Time datetime,
         Message varchar(1024) )
    end

Но это дает мне ошибку в строке "use", говоря, что "db" не существует. На этот раз я попытаюсь сделать это в двух разных командах.

4b9b3361

Ответ 1

Это даст вам список всех таблиц в вашей базе данных

SELECT Distinct TABLE_NAME FROM information_schema.TABLES

Таким образом, вы можете использовать его аналогично проверке базы данных.

If NOT EXISTS(SELECT Distinct TABLE_NAME FROM information_schema.TABLES Where TABLE_NAME = 'Your_Table')
BEGIN
    --CREATE TABLE Your_Table
END
GO

Ответ 2

Этот запрос доставит вам все таблицы в базе данных

USE [DatabaseName];

SELECT * FROM information_schema.tables;

Ответ 3

Отвечая на вопрос в заголовке, вы можете запросить sys.tables или sys.objects, где type = 'U', чтобы проверить наличие таблицы. Вы также можете использовать OBJECT_ID ('table_name', 'U'). Если он возвращает ненулевое значение, то таблица существует:

IF (OBJECT_ID('dbo.My_Table', 'U') IS NULL)
BEGIN
    CREATE TABLE dbo.My_Table (...)
END

Вы можете сделать то же самое для баз данных с DB_ID():

IF (DB_ID('My_Database') IS NULL)
BEGIN
    CREATE DATABASE My_Database
END

Если вы хотите создать базу данных и затем начать ее использовать, это необходимо сделать отдельными партиями. Я не знаю специфики вашего дела, но не должно быть много случаев, когда это невозможно. В SQL script вы можете использовать инструкции GO. В приложении достаточно легко отправить новую команду после создания базы данных.

Единственное место, где может возникнуть проблема, - это попытаться сделать это в хранимой процедуре и создавать базы данных "на лету", как правило, это плохая идея.

Если вам действительно нужно сделать это в одной партии, вы можете обойти проблему, используя EXEC, чтобы обойти ошибку синтаксического анализа не существующей базы данных:

CREATE DATABASE Test_DB2

IF (OBJECT_ID('Test_DB2.dbo.My_Table', 'U') IS NULL)
BEGIN
    EXEC('CREATE TABLE Test_DB2.dbo.My_Table (my_id INT)')
END

РЕДАКТИРОВАТЬ: Как предполагали другие, системный вид INFORMATION_SCHEMA.TABLES, вероятно, предпочтительнее, поскольку он предположительно является стандартом, идущим вперед и, возможно, между РСУБД.