Владелец таблицы SQL Server - изменить значение по умолчанию - PullRequest
4 голосов
/ 05 февраля 2010

Есть ли в SQL Server что-то похожее на USE (для переключения баз данных), которое может контролировать префикс владельца, используемый для таблиц?

Например, у нас есть приложение, которое настаивает на создании таблиц "theServiceAccount.TheTableName"; То, что мы действительно хотим, это заставить его поместить имена таблиц в dbo ... так что "dbo.TheTableName". У нас нет хорошего способа изменить SQL, который запускает приложение (оно закрывается), кроме перехвата, когда оно запускается, что позволяет нам запускать некоторый SQL. Поэтому было бы замечательно, если бы в этот момент мы могли запустить sql, в результате чего последующая таблица создания (или другие операции) по умолчанию будет иметь значение dbo вместо используемой учетной записи службы.

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

Спасибо!

Ответы [ 2 ]

3 голосов
/ 05 февраля 2010

В 2005 году по умолчанию каждый пользователь имеет собственную схему по умолчанию, если не указано иное.

Это должно сделать то, что вам нужно:

USE databasename  
ALTER USER theServiceAccount WITH DEFAULT_SCHEMA = dbo

Вы также можете изменить это через SSMS, посмотрев на свойства пользователя и изменив схему по умолчанию

0 голосов
/ 05 февраля 2010

Я полагаю, что вы можете сделать это, создав пользователя с нужной вам схемой по умолчанию, а затем используя оператор EXECUTE AS (см. http://msdn.microsoft.com/en-us/library/ms181362.aspx)

В вашем примере вы можете создать пользователя (или использовать dbo, не рекомендуется) с именем 'specialDBO', чья схема по умолчанию установлена ​​в dbo. Тогда у вас есть что-то вроде этого:

     USE [myfabdb];
     EXECUTE AS USER = 'speicalDBO';

     ... blah blah blah...

     REVERT;

Помните, вы не можете иметь оператор USE после оператора EXECUTE AS.

...