SQL Server中是否存在类似于USE(切换数据库)的内容,可以控制用于表的所有者前缀?
例如,我们有一个应用程序坚持创建表“theServiceAccount.TheTableName”;我们真正想要的是强制它将表名放在dbo下...所以“dbo.TheTableName”。我们没有一个很好的方法来更改应用程序运行的SQL(它是已售出的),而不是在启动时允许我们运行某些SQL的钩子。因此,如果我们可以在该点运行一个sql,这会使后续的create table(或其他操作)默认为dbo而不是正在使用的服务帐户,那就太棒了。
我确实知道create table语法允许指定所有者,但此时似乎不是一个选项。据我所知,这个应用程序生成的SQL从未指定所有者;它只是在它运行的SQL中有表名。
谢谢!
答案 0 :(得分:3)
在2005年,默认情况下,除非指定,否则每个用户都有自己的默认架构。
这应该做你需要的:
USE databasename
ALTER USER theServiceAccount WITH DEFAULT_SCHEMA = dbo
您还可以通过查看用户属性并更改默认架构
来通过SSMS更改此设置答案 1 :(得分:0)
我相信您可以通过创建具有所需默认架构的用户,然后使用EXECUTE AS
语句(请参阅http://msdn.microsoft.com/en-us/library/ms181362.aspx)
在您的示例中,您可以创建一个名为“specialDBO”的用户(或使用dbo,不建议使用),其默认架构设置为dbo。然后你有这样的事情:
USE [myfabdb];
EXECUTE AS USER = 'speicalDBO';
... blah blah blah...
REVERT;
请记住,USE
语句之后您不能拥有EXECUTE AS
语句。