SQL Server, создающий неправильные имена таблиц, почему?

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

Domain\UserName.T_TableName

вместо

dbo.T_TableName

Что случилось?

8
задан Dylan Corriveau 12 May 2015 в 14:52
поделиться

4 ответа

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

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

Вы можете проверить, какие пользователи базы данных у вас есть и какова их схема по умолчанию, проверив 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 не придется искать в разных схемах, если вы явно укажете ему, где находятся ваши объекты db.

10
ответ дан 5 December 2019 в 09:25
поделиться

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

ALTER USER [DOMAINNAME\UserName] WITH DEFAULT_SCHEMA = dbo;
4
ответ дан 5 December 2019 в 09:25
поделиться

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

Отличный способ сделать это с Knoppix CD.

Попробуйте скомпилировать свои программы под Linux с помощью gc, а когда они не работают, отследить проблемы (# include < windows >?) и сделать их работоспособными. Затем вернитесь к окнам и, скорее всего, скомпилируйте ОК.

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

-121--2890408-

В .NET Framework атрибуты могут использоваться по многим причинам - например,

  • Определение классов serializable

  • Выбор методов, отображаемых в веб-служба

Attributes позволяет добавлять описания к классам, свойствам и методам во время разработки, которые затем могут быть проверены во время выполнения посредством отражения.

Рассмотрим этот пример:

Скажем, что у вас есть класс, который имеет метод из старой версии, который все еще используется по любой причине, и теперь вы придумали новую версию класса, который делает фантастическое использование Generic List и LINQ и имеет новый метод для аналогичной цели. Вы хотите, чтобы разработчики предпочли новый, предоставленный в более поздней версии вашей библиотеки. Как ты это сделаешь? Один из способов - написать в документации. Лучший способ - использовать атрибут следующим образом.

public class AccountsManager
{
  [Obsolete("prefer GetAccountsList", true)]
  static Account[] GetAccounts( ) { }    
  static List<Account> GetAccountsList( ) { }      
}

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

AccountManager.GetAccounts () устарел: Предпочтительнее GetTalkedList

Можно также создать и добавить Пользовательские атрибуты в соответствии с требованиями.

Ссылка:


Надеюсь, это поможет

-121--1146890-

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

3
ответ дан 5 December 2019 в 09:25
поделиться

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

USE [yourDatabase]
GO
EXEC sp_addrolemember N'db_owner', N'DOMAIN\UserOrGroup'
GO
1
ответ дан 5 December 2019 в 09:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: