由于该版本的打包特性,需要创建一个SQL Server脚本(更多的是一个语句),它可以在SQL Server 7.0到2008之间正确执行,这基本上可以达到这个目的:
if exists(select * from sys.databases where name = 'Blah')
这很难的原因:
SQL 7'sys.databases'无效
SQL 2008'sysdatabases'无效
我使用serverproperty愚蠢地解析了版本号,根据版本允许IF:
if (select CONVERT(int,replace(CONVERT(char(3),serverproperty ('productversion')),'.',''))) >= 80
然后在SQL 7下发现serverinstperty不存在。
请注意,SQL可以远离安装,因此在本地计算机上没有任何困难 - reg条目/文件版本等是有用的。
SQL Server错误处理(尤其是7.0)很差,或者我可能不太了解它使它做一种try / catch。
我现在对此问题失明,所以任何指针都会受到赞赏。
谢谢,
加雷
答案 0 :(得分:1)
尝试
USE数据库
并测试@@ ERROR。
USE数据库
IF @@ ERROR<> 0 GOTO ErrExit逻辑......
RETURN 0
ErrExit:
返回1
(或RAISERROR,或......)
答案 1 :(得分:1)
感谢G Mastros
这看起来可能会产生100%的解决方案。它在SQL 7下可用。
我需要完成并测试,但乍一看我觉得它会飞。
这是草案代码FYI。
create table #dwch_temp
(
name sysname
,db_size nvarchar(13)
,owner sysname
,dbid smallint
,created nvarchar(11)
,status nvarchar(600)
,compatibility_level tinyint
)
go
insert into #dwch_temp
exec sp_helpdb
if exists(select name from #dwch_temp where name = 'DWCHServer')
-- run the code
drop table #dwch_temp
答案 2 :(得分:0)
你可以在USE [DatabaseName]周围尝试TRY ... CATCH。
答案 3 :(得分:0)
感谢Le Dorfier。它仍然存在引发错误并且不由GOTO处理的问题:
Msg 1801,Level 16,State 3,Line 9 数据库'DWCHServer'已存在。选择其他数据库名称。
我甚至尝试过
DECLARE @err int 使用DWCHServer
SELECT @err = @@ error IF @err<> 0 GOTO ErrExit
我试图避免这种情况,因为它可能会产生影响,具体取决于SQL框的设置。它可能会引用某人或某事。我对此表示怀疑,因为它是16级(其他用户错误 - 很好)而且只有17+通常会启动某种工作流程。
考虑将系统要求改为2000+;)
答案 4 :(得分:0)
我无法访问SQL 7实例,但我建议您尝试:
sp_helpDB
我知道这适用于sql 2000和sql 2005以获取数据库列表。我怀疑它也适用于SQL 7。
答案 5 :(得分:0)
sysdatabases是Sybase时代的一个残余,并且仍然存在于SQL 2008中(尽管已弃用)。您可以使用如下查询检查数据库是否存在:
IF EXISTS(SELECT 1 FROM master..sysdatabases where name ='Blah')