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

4

我正在尝试使用Delphi 7连接到SQL Server 2008中的数据库。我有一个包含数据库名称的数组arr_foo。以下是我的脚本:

for i:=3 to 5 do begin
  sql := 'SELECT * FROM sys.databases WHERE name = '+quotedstr(arr_foo[i]);
  adoquery1.close;
  adoquery1.sql.text := sql;
  adoquery1.open;
  if not adoquery1.isempty then begin
    adoconnection1.close;
    adoconnection1.defaultdatabase := arr_foo[i];
    adoconnection1.open;
  end;
end;

首先,adoquery1已经连接到adoconnection1。 adoconnection1已连接到// 192.168.5.211(这是我的服务器)。

问题在于,当我在Delphi 7上运行上述脚本时,它返回一个错误“属性值无效。请确保正确输入值”,并停止于“adoquery1.open”,但当我在SQL SERVER Management Studio 2008中运行查询SELECT * FROM sys.databases WHERE name = 'mydb3'时,它正常地返回1条记录。我的脚本有什么问题?


在 SQL Server 中,当您使用管理工具登录到服务器时,您会自动连接到“master”数据库,这就是为什么查询起作用的原因。我不认为adoconnection会这样做。 - Pieter B
可能是重复的问题:如何在SQL Server中检查数据库是否存在? - Eduardo
1个回答

5

尝试使用DB_ID函数 -

IF DB_ID('AdventureWorks2008R2') IS NOT NULL
    PRINT 'exists'

将此查询更改为:

sql := 'SELECT ID = DB_ID(' + quotedstr(arr_foo[i]) + ')';

并检查ID值不为空。


谢谢。这解决了问题。由于没有其他人回答,我将标记此为正确答案。 - dapidmini

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接