提问



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

最佳参考


从微软的脚本:


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'

其它参考1


实际上最好使用:


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[7]

其它参考2


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


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

其它参考3


我喜欢@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

其它参考4


尝试这个


IF EXISTS 
   (
     SELECT name FROM master.dbo.sysdatabases 
    WHERE name = N'New_Database'
    )
BEGIN
    SELECT 'Database Name already Exist' AS Message
END
ELSE
BEGIN
    CREATE DATABASE [New_Database]
    SELECT 'New Database is Created'
END