Синтаксис сценария SQL для нескольких баз данных под одним пользователем - PullRequest
0 голосов
/ 29 марта 2011

Это, наверное, глупо просто, но по какой-то причине у меня возникают проблемы с тем, чтобы заставить его работать.У меня есть типичный сценарий импорта, который я пытаюсь запустить на сервере MS SQL с одним основным пользователем (в отличие от одного пользователя с доступом только к одной базе данных).

Когда я запускаю сценарий .SQL,он создает базу данных, а затем начинает создавать таблицы.Вот где это становится интересным.Это не создание баз данных под БД, которую я только что сделал.Он выбрасывает таблицы в представлении «Системные базы данных» и не ограничивает создание таблицы только что созданной БД.

Я пробовал:

CREATE TABLE table_name
CREATE TABLE database_name.table_name

Возможно, я что-то упускаюдействительно легко.Я обычно не сталкиваюсь с этим с MySQL, когда один пользователь сопоставлен с одной базой данных, так как пользователь может видеть только одну базу данных, поэтому MySQL предполагает, что она должна быть единственной, с которой нужно работать.

Разница в том, что я использую MSSQL 2008, и, возможно, он работает немного по-другому, и я что-то упускаю.Спасибо за вашу помощь!


Пробовал и это тоже.Неудачно.Говорит, что база данных не существует, когда она пытается создать таблицу.Я думаю, что, читая сценарий запроса сверху вниз, он сначала создаст базу данных, а затем попытается создать таблицу позже.

CREATE DATABASE DATABASENAME;
CREATE TABLE DATABASENAME.dbo.TABLENAME
  (
     field_one   VARCHAR(100) NOT NULL,
     field_two INT NOT NULL,
     PRIMARY KEY(field_one)
  )

Это рабочий пример после того, как все это выяснилииз.Этот синтаксис работает хорошо, и мне не нужно указывать путь к DBO перед именами таблиц таким образом.Очиститель и получил мне результаты, которые я искал.Спасибо всем.

IF Db_id('DBNAME') IS NULL
  CREATE DATABASE DBNAME;

GO

USE [DBNAME];

GO

CREATE TABLE TABLENAME
  (
     COL1   VARCHAR(100) NOT NULL,
     COL2 INT NOT NULL,
     PRIMARY KEY(COL2)
  )

INSERT INTO TABLENAME
            (COL1,
             COL2)
     VALUES('1234',1001),
            ('1234',1002),
            ('1234',1003),
            ('1234',1004)

В основном он просто проверяет, создана ли база данных, прежде чем делать что-либо еще, а затем устанавливает базу данных USE на ту, с которой я работаю.Все остальное просто обычный SQL, так что веселитесь.Ура!

1 Ответ

1 голос
/ 29 марта 2011

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

USE [database_name]
GO

По умолчанию SQL-SERVER использует основную БД, которая перечисленав системных базах данных.

Другой способ заключается в использовании префикса базы данных, но с указанием владельца:

INSERT INTO database_name.dbo.table_name
INSERT INTO database_name..table_name
...