尽管我指定了不同的模式,为什么使用默认模式dbo创建表?

时间:2011-07-21 06:37:44

标签: sql sql-server-2005

如果我在SQL Server 2005 SSMS(版本9.00.4035.00)中运行sql脚本,如

CREATE TABLE xxx.MyTable

虽然架构xxx确实存在,但表格将被创建为dbo.MyTable!没有错误消息!

我用来运行脚本作为所有权限的用户(使用windows用户和带有服务器角色sysadmin的sql用户测试)

出了什么问题?

2 个答案:

答案 0 :(得分:1)

你现在可能有2张桌子

  • xxx.MyTable
  • dbo.MyTable

检查:

SELECT SCHEMA_NAME(schema_id), name, create_date, modify_date
FROM sys.objects
WHERE name = 'MyTable'

不要依赖SSMS对象资源管理器:它需要刷新(右键单击表节点,刷新)。

或错误的数据库,错误的服务器等。

我们使用模式,从不有任何问题

编辑:现在检查所有数据库

EXEC sp_msforeachdb '
    USE ?
    SELECT SCHEMA_NAME(schema_id), name, create_date, modify_date
    FROM sys.objects
    WHERE name = ''MyTable''
'

答案 1 :(得分:-1)

请查看可能的解决方法:

1)创建一个SQL登录,其中包含对数据库的dbo权限,其中必须创建表和其他对象。让用户使用您创建的SQL登录名连接到SSMS。可以使用SSMS创建表而不会出现问题。

2)让Windows安全组的用户使用TSQL创建表。您将看到将使用用户的用户名为此数据库创建新架构和用户。使用Windows用户名作为所有者创建表。 现在,转到已创建的数据库用户。将默认架构更改为xxx。 该安全组的用户可以在SSMS中创建表,并使用dbo作为对象所有者。

显然,这是一个微软的bug,尚未解决。

https://connect.microsoft.com/feedback/viewfeedback.aspx?FeedbackID=238246&wa=wsignin1.0&siteid=68

希望这有帮助。