【问题标题】:How to have SQL Server function user_name return dbo如何让 SQL Server 函数 user_name 返回 dbo
【发布时间】:2017-03-13 17:31:14
【问题描述】:

我在 SQL Server 数据库中创建了一个用户 (testQA),该用户是数据库所有者,但是当我尝试运行 user_name 命令时,我得到的是实际用户名而不是 dbo。我想运行第 3 方提供的一些升级脚本,其中有如下语句

if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'TAb1' and  TABLE_SCHEMA = user_name() )
    drop table TAb1

为了正确运行,user_name 必须是 dbo,但不知何故,当我运行 user_name 时,我创建的用户总是返回 testQA。我可以进行任何更改以返回dbo吗?

【问题讨论】:

  • 您不应该使用 INFORMATION_SCHEMA.TABLES 来确定对象的架构。该数据并不总是最新的,并且存在向后兼容性。 msdn.microsoft.com/en-us/library/ms186224.aspx.
  • 模式和用户是两个不同的东西。如果你想在数据库下创建一个与你的用户名相同的新模式。

标签: sql sql-server sql-server-2008 sql-server-2012


【解决方案1】:

您正在混合用户名和架构名称。用户名是您的用户名(此处为 TestQA)。架构名称是您的用户、表或任何 DB 对象所依赖的架构的名称(此处为 dbo,也称为“.”)。

为了获取活动用户的默认架构,请使用SELECT SCHEMA_NAME()

更多信息:Find out default SQL Server schema for session

【讨论】:

    【解决方案2】:

    也许第 3 方脚本假设您根据与您的用户名匹配的架构创建了表,也许是为了阻止它盲目运行和破坏表。

    要使用 'dbo' 而不是登录的用户名执行它,只需执行:

    if exists (select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'TAb1' and TABLE_SCHEMA = 'dbo' ) drop table TAb1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-02
      • 2011-09-10
      • 1970-01-01
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多