我正在尝试自动化sql脚本以将列添加到给定系统上的现有数据库。该脚本将在具有一个数据库或另一个数据库的系统上运行。该脚本在任何情况下均不应引起错误: 1.存在两个数据库之一 2.两个数据库都存在 3.两个数据库都不存在。
我尝试了此操作,但是当数据库'DatabaseName'不存在时,我不断收到错误消息。在这种情况下,我希望脚本被忽略。
IF DB_ID('DatabaseName') IS NOT NULL
BEGIN
PRINT 'DatabaseName Exists'
IF COL_LENGTH('[DatabaseName].[dbo].[Table]', 'NewColumn') IS NULL
BEGIN
ALTER TABLE [DatabaseName].[dbo].[Table]
ADD [NewColumn] bit NOT NULL DEFAULT 0;
PRINT 'Modified DatabaseName.Table'
END
END
ELSE
BEGIN
PRINT 'DatabaseName Does Not Exist'
-- therefore do nothing
END
这给了我错误:
Msg 2702, Level 16, State 2, Line 6
Database 'DatabaseName' does not exist.
我还尝试了 使用“ DatabaseName” 相同或相似的错误,因为它们不存在。
要澄清:如果它不存在就可以。我只是尝试优雅地处理错误,因此安装可以继续
答案 0 :(得分:1)
您可以使用try catch块:
<Main />
答案 1 :(得分:1)
使用动态SQL。该问题发生在代码的编译阶段。动态SQL将在初始编译阶段“隐藏”对数据库的引用。
例如,在SQL Server中,它看起来像:
IF COL_LENGTH('[DatabaseName].[dbo].[Table]', 'NewColumn') IS NULL
BEGIN
exec sp_executesql N'
ALTER TABLE [DatabaseName].[dbo].[Table]
ADD [NewColumn] bit NOT NULL DEFAULT 0';
PRINT 'Modified DatabaseName.Table'
END