如何检查服务器上是否存在给定的数据库?

JM

我正在做一个union来自不同数据库的同一张表来获取所有公司的详细信息。像下面这样的东西。

CREATE PROCEDURE [dbo].[getCompanyDetails]
    (@Companycode varchar(2))
AS
BEGIN
    SELECT '[FirstDataBase]' DBNAME, CompanyID, CompanyName 
    FROM [FirstDataBase].dbo.tblCompany 
    WHERE CompanyID LIKE @Companycode+'%'

    UNION

    SELECT '[SecondDataBase]' DBNAME, CompanyID, CompanyName 
    FROM [SecondDataBase].dbo.tblCompany 
    WHERE CompanyID LIKE @Companycode+'%'

    UNION

    SELECT '[ThirdDataBase]' DBNAME, CompanyID, CompanyName 
    FROM [ThirdDataBase].dbo.tblCompany 
    WHERE CompanyID LIKE @Companycode+'%'

    UNION

    SELECT '[FourthDataBase]' DBNAME, CompanyID, CompanyName 
    FROM [FourthDataBase].dbo.tblCompany 
    WHERE CompanyID LIKE @Companycode+'%'
END

这工作正常,我正在获取所有公司详细信息,但我想确保服务器中存在该数据库。

因为如果服务器中不存在联合数据库中的任何一个,那么存储过程将失败。如何更改存储过程,以便即使任何联合失败,另一个也应该工作并给出结果?

PS:一个额外的问题,有什么办法可以从另一台服务器上联合一个数据库?

肖恩

最简单的是 IF DB_ID('yourdb') IS NOT NULL

对于讨论等,请参阅如何检查 SQL Server 中是否存在数据库?

将其与 select 语句一起使用的一种方法是使用动态 SQL 构建 SQL 语句,然后运行它,例如,

DECLARE @CustomSQLSelect nvarchar(4000)

SET @CustomSQLSelect = 
    CASE WHEN DB_ID('FirstDataBase') IS NOT NULL
         THEN ' UNION Select ''[FirstDataBase]'' DBNAME,CompanyID ,CompanyName 
              From [FirstDataBase].dbo.tblCompany Where CompanyID like ''' + @Companycode + ''' +''%'''
         ELSE '' END
    + CASE WHEN DB_ID('SecondDataBase') IS NOT NULL
         THEN ' UNION Select ''[SecondDataBase]'' DBNAME,CompanyID ,CompanyName 
              From [SecondDataBase].dbo.tblCompany Where CompanyID like ''' + @Companycode + ''' +''%'''
         ELSE '' END
    + CASE WHEN DB_ID('ThirdDataBase') IS NOT NULL
         THEN ' UNION Select ''[ThirdDataBase]'' DBNAME,CompanyID ,CompanyName 
              From [ThirdDataBase].dbo.tblCompany Where CompanyID like ''' + @Companycode + ''' +''%'''
         ELSE '' END
    + CASE WHEN DB_ID('FourthDataBase') IS NOT NULL
         THEN ' UNION Select ''[FourthDataBase]'' DBNAME,CompanyID ,CompanyName 
              From [FourthDataBase].dbo.tblCompany Where CompanyID like ''' + @Companycode + ''' +''%'''
         ELSE '' END;

-- You may want to put in a PRINT @CustomSQLSelect to review the SQL

IF @CustomSQLSelect LIKE ' UNION %' 
    BEGIN
    
    SET @CustomSQLSelect = STUFF(@CustomSQLSelect, 1, 7, ''); -- Delete the first ' UNION ' statement

    EXEC (@CustomSQLSelect);

    END
ELSE
    BEGIN
    PRINT 'No valid databases!'
    END;



我想我在上面的 SQL 中得到了正确的撇号等。

您也可以创建一个临时表并填充它......在我看来这更容易维护。

CREATE TABLE #Companies (
    DBName nvarchar(100), 
    CompanyId varchar(20), 
    CompanyName nvarchar(100)
    )
-- Note - set your nvarchar/varchars appropriately

IF DB_ID('FirstDatabase') IS NOT NULL
    BEGIN
    INSERT INTO #Companies (DBName, CompanyID, CompanyName)
      Select '[FirstDataBase]' DBNAME,CompanyID ,CompanyName 
      From   [FirstDataBase].dbo.tblCompany 
      Where CompanyID like @Companycode+'%'
    END

-- Then do the same for other databases

请注意,如果数据库不存在,在 SSMS 中查看您的查询可能会指示错误。

另请注意,UNION(而不是 UNION ALL)将有效地将“SELECT”语句更改为“SELECT DISTINCT”以停止重复。这增加了额外的处理。

临时表版本没有。如果需要,您可以添加“DISTINCT”。

或者,如果您对重复项感到满意,或者您知道没有重复项(例如,companyID 是一个 PK 或在每个数据库中是唯一的),那么将 UNION 更改为 UNION ALL 可能会加快处理速度。

从其他服务器读取数据 - 一种方法是使用链接服务器我相信这些是在服务器级别设置的。您需要进行研究,看看这是否适合您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何检查数据库和表在vb .net项目中的sql服务器中是否存在?

如何检查表 B 是否与表 A 中存在的项目数量匹配?数据库服务器

如何访问Oracle Apex中远程服务器上存在的数据库表

如何检查服务器PHP上是否存在数据

检查sql服务器数据库中是否存在一行,然后使用vb.net删除

如何在不使用数据库的情况下将数据保存在服务器上?

如何以编程方式检查 SQL 数据库/服务器是否支持 C# 中的压缩?

如何检查给定位置是否存在 Neo4j 数据库

如何制作将文本保存在数据库中并在服务器上上传文件的表单

是否存在Firebase实时数据库服务器日志?

作业数据库和目标数据库是否需要位于不同的服务器上?

检查FTP服务器上的文件是否存在

使用JavaScript检查服务器上是否存在图像?

检查服务器上URL是否存在

检查目录在远程服务器上是否存在

检查服务器上是否存在音频文件

在插入Android上的数据库之前,如何检查Room数据库中是否存在数据?

服务器上是否安装了MongoDB数据库?

如何最好地检查Web服务器与数据库的连接?

如何通过Macbook上的终端连接到服务器上的MYSQL数据库?

如何使用URL检查服务器上是否存在图像

如何使用Shell检查远程服务器上是否存在文件

如何检查文件是否存在于远程服务器上

WinSCP如何在FTP服务器上创建目录之前检查目录是否存在?

如何检查DART中是否存在给定的日期?

如何确定数据库服务器或嵌入式数据库是否合适

如何在Java中从服务器检查数据中是否存在密钥?

服务器上的数据库支持

Apache Tomcat服务器上的数据库PostgreSQL