2010-02-04 65 views
4

SQL Server中是否有類似於USE(用於切換數據庫)的東西可以控制用於表的所有者前綴?SQL Server Table Owner - 更改默認值

例如,我們有一個應用程序堅持創建表「theServiceAccount.TheTableName」;我們真正想要的是迫使它把表名放在dbo下面...所以「dbo.TheTableName」。我們沒有一種好的方法來改變應用程序運行的SQL(它被銷售),除了啓動時允許我們運行一些SQL的鉤子。所以如果我們可以在那個時候運行一個sql,那會很好,這會使後續的create table(或其他操作)默認爲dbo而不是正在使用的服務帳戶。

我意識到create table語法允許指定所有者,但目前似乎並不是一種選擇。據我所知,這個應用程序生成的SQL從未指定所有者;它只是在它運行的SQL中有表名。

謝謝!

+2

對於SQL 2005前綴不再意味着所有者通過SSMS改變這種情況,它表示模式。 – Andrew 2010-02-04 22:19:18

回答

3

在2005年,默認情況下,每個用戶都有自己的默認模式,除非指定。

這應該做你需要的東西:

USE databasename 
ALTER USER theServiceAccount WITH DEFAULT_SCHEMA = dbo 

您還可以通過查看用戶屬性和更改默認模式

+0

做到了! – TheToasterThatCould 2010-02-05 14:50:17

0

我相信你可以通過創建你想要的默認模式的用戶,然後使用EXECUTE AS語句來做到這一點(見http://msdn.microsoft.com/en-us/library/ms181362.aspx

在您的例子,你可以創建一個用戶(或使用DBO,不建議)稱爲'specialDBO',其默認模式設置爲dbo。然後,你有這樣的事情:

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

    ... blah blah blah... 

    REVERT; 

記住,你不能有EXECUTE AS語句後USE聲明。