好,我已在如果从不同的DATABSE存在Report
以下查询MS SQL IF语句执行IF和ELSE块
IF NOT EXISTS (SELECT name
FROM sys.databases
WHERE name = N'Report')
BEGIN
DECLARE @DatabasePath NVARCHAR(1000);
SET @DatabasePath = (SELECT ResultMessage + '\'
FROM [Admin]..[Process]);
EXEC ispCREATEDB N'Report', @DatabasePath, N'10MB', N'20%'
END
ELSE
BEGIN
IF EXISTS (SELECT *
FROM Report.sys.objects
WHERE name = N'FatalErrSumm' AND type = N'U')
BEGIN
DROP TABLE [Report]..[FatalErrSumm];
CREATE TABLE [Report]..[FatalErrSumm]
(
[MDF] NVARCHAR(255) NULL,
[Error] INT NULL,
);
END
END
此检查;如果它不存在,则创建它,如果它存在,则检查表FatalErrSumm
是否存在,如果存在,则删除并重新创建它。
的问题是,它似乎是执行IF NOT EXISTS
块都possiblities并给予错误
Msg 2702, Level 16, State 2, Line 24
Database 'Report' does not exist.
当数据库Report
不存在。所以它不应该输入ELSE
块,但它似乎是。这是非常基本的东西,但我不能为我的生活发现错误,我在这里做错了什么?
谢谢你的时间。
这里没有理由使用动态SQL。你为什么认为我应该把它变成动态的?谢谢你的时间。 – MoonKnight 2012-07-20 10:13:46
如果运行代码时数据库报告不存在,将会出现错误。唯一的方法是使用动态sql绕过它。 – Madhivanan 2012-07-20 10:23:51
有人假定这个代码存在于一个过程中。 OP谈到'一个查询'不是一个程序。你需要动态的sql,否则不需要它。 – Paul 2012-07-20 14:55:41