【问题标题】:Check if schema exists in a specific database on sql server检查架构是否存在于 sql server 上的特定数据库中
【发布时间】:2019-08-16 21:14:15
【问题描述】:

我知道你可以做到this

IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'log')
BEGIN
    -- some code 
END

但是如何检查特定数据库中是否存在模式?数据库名称为@dbname

第一次尝试

一个简单的解决方法是

exec ('use db_name; select schema_id(''log'')')

但如果你想在 ifconstruction 中使用它,你最终会得到一些丑陋的 sp_executesql 语法。那么检查特定数据库中是否存在模式的最佳方法是什么?

【问题讨论】:

  • SELECT * FROM databasename.sys.schemas 不工作吗?

标签: sql-server database-schema


【解决方案1】:

我会这样做:

IF NOT EXISTS (SELECT * FROM DBName.sys.schemas WHERE name = 'log')
BEGIN
    -- some code 
END

刚刚在我的环境中尝试过,它可以工作。

【讨论】:

  • 谢谢!不知道为什么我错过了这么明显的东西。
  • 其实并没有解释那部分问题是我只能访问@dbname(一个参数)。希望会有一些主表,所以我可以使用where 而不是sp_executesql
  • @Roelant:一般来说,数据库范围的对象只能从数据库中访问,要么通过use 或通过显式前缀它们(唯一真正的例外是接受的系统表值函数数据库名称/ID 作为参数),这意味着您无法绕过动态 SQL。当您处理动态名称时,这是一个不幸且不可避免的痛苦,但替代方案是跨数据库的视图,并带有一些非常难看的跨数据库锁定。
猜你喜欢
  • 2020-08-16
  • 1970-01-01
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 2012-07-29
  • 2014-09-12
相关资源
最近更新 更多