【问题标题】:SQLServer: Problem choosing a default schema for a userSQLServer:为用户选择默认架构时出现问题
【发布时间】:2011-04-04 15:17:16
【问题描述】:

我命名了一个错误的架构,并且所有的表都是用一个错误名称的架构创建的。所以我创建了一个,并使用 alter schema 来传输表。

第一个问题是,当我尝试删除错误的架构时,SQL Server 失败,其次,虽然用户是默认使用新架构创建的,但我想我可以简单地说

select * from table1, 

而不是

select * from myschema.table1, 

但它不起作用。我必须明确。有什么想法吗? 更奇怪的是,默认使用错误架构创建的旧用户现在无法更改它。这有点令人沮丧。请帮忙。

【问题讨论】:

    标签: sql-server schema


    【解决方案1】:

    您可以尝试执行以下操作吗:

    ALTER USER userName  
    WITH DEFAULT_SCHEMA =myschema
    

    假设“myschema”是您希望用户默认使用的新架构。

    我知道您提到新用户是使用新架构创建的,但如果是这种情况,那么您应该不会看到这种错误。所以似乎出了点问题。 显式设置默认架构可能会纠正此问题。

    一般来说,

    1. 当前数据库中登录会话的默认架构是分配给当前数据库级别主体 - 数据库用户的默认架构。

    2. 如果您指的是默认架构中的对象,则无需指定架构名称。

    3. 如果您要引用默认架构之外的对象,则必须指定架构名称。

    有关会话架构等的更多详细信息,this 可能也会有所帮助

    【讨论】:

    • 它有效,如果我转到用户属性,它会显示新的默认架构。但是,除非我明确地说 select * from new_default_schema.table1,否则选择查询不起作用,这违背了我应用默认模式的目的。有什么想法吗?
    • 只是为了绝对确定 - 您确定您正在与同一用户连接。你能不能做一个 PRINT User_Name();而不是您的选择 - 验证连接使用的用户名?我知道这听起来可能很傻,但有时重新检查会有所帮助,尤其是在像你这样的场景中......老实说这似乎没有意义:-)
    • 哦该死。尽管我明确表示与对象资源管理器断开连接,但我一直在使用相同的查询选项卡,所以基本上我整个晚上都在对旧用户凭据进行查询。出于同样的原因,我无法删除旧模式,因为会话正在保留它。有史以来最糟糕的夜晚。
    • :-) :-) 我认为这是发生在我们最好的人身上的事情!很高兴为您提供帮助!
    猜你喜欢
    • 2021-05-28
    • 2022-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多