SQL Server表所有者 - 更改默认值

4
在SQL Server中是否有类似于USE(切换数据库)的东西,可以控制在表中使用的所有者前缀?
例如,我们有一个应用程序,坚持创建"theServiceAccount.TheTableName"这样的表;而我们真正想要的是强制它将表名放在dbo下面...所以是"dbo.TheTableName"。我们没有很好的方法来更改应用程序运行的SQL(它是供应的),除了启动时允许我们运行一些SQL的钩子。因此,如果我们可以在那个点运行一个sql,使后续的create table(或其他操作)默认为dbo而不是使用的服务帐户,那就太好了。
我确实意识到create table语法允许指定所有者,但目前似乎没有这个选项。从我所看到的内容来看,这个应用程序生成的SQL从未指定所有者;它只在运行的SQL中有表名。
谢谢!

2
对于 SQL 2005,该前缀不再表示所有者,而表示模式。 - Andrew
2个回答

3

在2005年,默认情况下每个用户都有自己的默认模式,除非另有规定。

这应该可以满足您的需求:

USE databasename  
ALTER USER theServiceAccount WITH DEFAULT_SCHEMA = dbo

您还可以通过查看用户属性并更改默认架构来通过SSMS更改此设置。


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;

请记住,在 EXECUTE AS 语句之后不能有 USE 语句。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接