首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何查询数据库架构是否存在

如何查询数据库架构是否存在
EN

Stack Overflow用户
提问于 2008-10-22 14:42:00
回答 4查看 97.4K关注 0票数 118

作为构建过程的一部分,我们在将代码部署到4个不同的环境时运行数据库更新脚本。此外,由于相同的查询将被添加到中,直到我们将一个版本放入生产环境中,它必须能够在给定的数据库上运行多次。如下所示:

代码语言:javascript
复制
IF NOT EXISTS (SELECT * FROM sys.tables WHERE object_id = OBJECT_ID(N'[Table]'))
BEGIN
  CREATE TABLE [Table]
  (...)
END

目前,我在部署/构建脚本中有一个create schema语句。我在哪里查询模式的存在?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-22 14:44:32

你在找sys.schemas吗?

代码语言:javascript
复制
IF NOT EXISTS (SELECT * FROM sys.schemas WHERE name = 'jim')
BEGIN
EXEC('CREATE SCHEMA jim')
END

请注意,CREATE SCHEMA必须在其自己的批处理中运行(根据the answer below)

票数 191
EN

Stack Overflow用户

发布于 2009-02-06 17:32:03

@bdukes在确定模式是否存在方面是正确的,但上面的语句在SQL Server2005中不起作用。CREATE SCHEMA <name>需要在自己的批处理中运行。解决方法是在exec中执行CREATE SCHEMA语句。

下面是我在构建脚本中使用的内容:

代码语言:javascript
复制
IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = '<name>')
BEGIN
    -- The schema must be run in its own batch!
    EXEC( 'CREATE SCHEMA <name>' );
END
票数 165
EN

Stack Overflow用户

发布于 2019-03-16 04:20:57

这是旧的,所以我觉得有必要添加:对于SQL SERVER 2008+,这些都是有效的(对于select部分),然后使用EXECUTE('CREATE SCHEMA <name>')在负面结果上实际创建它。

代码语言:javascript
复制
DECLARE @schemaName sysname = 'myfunschema';
-- shortest
If EXISTS (SELECT 1 WHERE SCHEMA_ID(@schemaName) IS NOT NULL)
PRINT 'YEA'
ELSE
PRINT 'NOPE'

SELECT DB_NAME() AS dbname WHERE SCHEMA_ID(@schemaName) IS NOT NULL -- nothing returned if not there

IF NOT EXISTS ( SELECT  top 1 *
                FROM    sys.schemas
                WHERE   name = @schemaName )
PRINT 'WOOPS MISSING'
ELSE
PRINT 'Has Schema'

SELECT SCHEMA_NAME(SCHEMA_ID(@schemaName)) AS SchemaName1 -- null if not there otherwise schema name returned

SELECT SCHEMA_ID(@schemaName) AS SchemaID1-- null if not there otherwise schema id returned


IF EXISTS (
    SELECT sd.SchemaExists 
    FROM (
        SELECT 
            CASE 
                WHEN SCHEMA_ID(@schemaName) IS NULL THEN 0
                WHEN SCHEMA_ID(@schemaName) IS NOT NULL THEN 1
                ELSE 0 
            END AS SchemaExists
    ) AS sd
    WHERE sd.SchemaExists = 1
)
BEGIN
    SELECT 'Got it';
END
ELSE
BEGIN
    SELECT 'Schema Missing';
END
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/226042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档