SQL Server создает неправильные имена таблиц, почему? - PullRequest
8 голосов
/ 19 февраля 2010

Вопрос: когда я создаю таблицу (T_TableName) с помощью SQL Server Management-Studio, она всегда создает таблицу как

Domain\UserName.T_TableName

вместо

dbo.T_TableName

Что не так?

Ответы [ 4 ]

9 голосов
/ 20 февраля 2010

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

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

Вы можете проверить, какие пользователи базы данных у вас есть и какова их схема по умолчанию, проверив sys.database_principals (SQL Server 2005 и выше):

SELECT name, type_desc, default_schema_name
FROM sys.database_principals

Чтобы решить это:

  • укажите схему, которую вы хотите использовать явным образом (в любом случае, рекомендуется!)

    CREATE TABLE dbo.T_TableName
    
  • изменить схему по умолчанию для пользователя на dbo

    ALTER USER [Domain\YourUser] WITH DEFAULT_SCHEMA = dbo
    

Но, как правило, я рекомендую всегда использовать "dbo". префикс явно, если вы хотите, чтобы все ваши объекты базы данных были в схеме dbo. Также помогает (хотя и незначительно) производительность, поскольку SQL Server не придется охотиться в разных схемах, если вы прямо скажете ему, где живут ваши объекты БД.

4 голосов
/ 19 февраля 2010

Вам нужно либо создать свою таблицу как "dbo.Wh чем угодно", ИЛИ вам нужно изменить схему по умолчанию (или ваш SA сделает это за вас), введя команду типа:

ALTER USER [DOMAINNAME\UserName] WITH DEFAULT_SCHEMA = dbo;
3 голосов
/ 19 февраля 2010

Назовите его dbo.T_TableName в SSMS. Если у вас есть правильные разрешения, это будет работать.

1 голос
/ 19 февраля 2010

Вы назначены как db_owner для базы данных, в которой вы создали таблицу? Если нет, это может быть проблемой. Попробуйте добавить свои разрешения сопоставления пользователей в базу данных как таковые.

USE [yourDatabase]
GO
EXEC sp_addrolemember N'db_owner', N'DOMAIN\UserOrGroup'
GO
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...