当前位置:  开发笔记 > 编程语言 > 正文

如何检查SQL Server中是否存在数据库?

如何解决《如何检查SQLServer中是否存在数据库?》经验,为你挑选了4个好方法。

使用TSQL检查SQL Server上是否存在数据库的理想方法是什么?似乎有多种方法可以实现这一点.



1> Eduardo..:

实际上最好使用:

IF DB_ID('dms') IS NOT NULL
   --code mine :)
   print 'db exists'

请参阅https://docs.microsoft.com/en-us/sql/t-sql/functions/db-id-transact-sql


大概是因为db_id比在`[master]`中检查特定位置的数据库名称更安全
嗯,是的,加上db_id()几乎不可能比db_id查询数字更糟糕(可能是相同的复杂性/成本)而不是接受的答案.因此我更倾向于以更智能的方式实现db_id(),因为它是由数据库开发人员完成的.
嗯,它肯定更短,更神秘.出于好奇,为什么它更好?
如果您有权限问题,例如您没有访问[master]的权限,这很有效!
@MadTigger:在调用`db_id`时不应该包含`[]`; 这是SQL语法,不是数据库名称的一部分.

2> eKek0..:

从微软的脚本:

DECLARE @dbname nvarchar(128)
SET @dbname = N'Senna'

IF (EXISTS (SELECT name 
FROM master.dbo.sysdatabases 
WHERE ('[' + name + ']' = @dbname 
OR name = @dbname)))

-- code mine :)
PRINT 'db exists'


这可能来自Microsoft脚本,但它不是Microsoft推荐的做法.他们鼓励使用INFORMATION_SCHEMA视图而不是直接访问系统表.
为什么鼓励使用INFORMATION_SCHEMA而不是直接使用对表的引用?
一般情况下,这是因为Microsoft提交格式INFORMATION_SCHEMA,并保留随意更改系统表的权利.但在这种情况下,仔细观察后,INFORMATION_SCHEMA不起作用,所以这可能是最好的选择.
我同意INFORMATION_SCHEMA是检查数据库内对象的首选.但是可以用INFORMATION_SCHEMA来检查db本身吗?<<<<< ............... CHECK_CONSTRAINTS检查约束COLUMN_DOMAIN_USAGE每个具有用户定义数据类型的列.COLUMN_PRIVILEGES每个列都具有当前用户在当前数据库中授予的权限.COLUMNS列出系统中的每一列CONSTRAINT_COLUMN_USAGE每个列都定义了约束.CONSTRAINT_TABLE_USAGE每个都在其上定义约束的表.
@mwigdahl - 请提供此声称推荐做法的参考.

3> si618..:
IF EXISTS (SELECT name FROM master.sys.databases WHERE name = N'YourDatabaseName')
  Do your thing...

顺便说一句,这直接来自SQL Server Studio,因此如果您可以访问此工具,我建议您开始使用可用的各种"Script xxxx AS"功能.会让你的生活更轻松!:)


如果'USE [Master]'不方便,您可以直接将任何数据库中的视图视图称为'master.sys.databases'

4> Don Rolling..:

我喜欢@Eduardo的答案,我也喜欢接受的答案。我喜欢从类似的东西中获取布尔值,所以我为你们写了它。

CREATE FUNCTION dbo.DatabaseExists(@dbname nvarchar(128))
RETURNS bit
AS
BEGIN
    declare @result bit = 0 
    SELECT @result = CAST(
        CASE WHEN db_id(@dbname) is not null THEN 1 
        ELSE 0 
        END 
    AS BIT)
    return @result
END
GO

现在您可以像这样使用它:

select [dbo].[DatabaseExists]('master') --returns 1
select [dbo].[DatabaseExists]('slave') --returns 0

推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有