Skip to content

Commit aef964a

Browse files
committed
Fixed issue #478
Do not throw or log an exception if AutoCreateSqlDatabase is set to true and the DB alerady exists.
1 parent 9f28d00 commit aef964a

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/Platform/SqlCreateDatabaseWriter.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Text;
23
using static System.FormattableString;
34

45
namespace Serilog.Sinks.MSSqlServer.Platform
@@ -15,6 +16,15 @@ public SqlCreateDatabaseWriter(string databaseName)
1516
public string DatabaseName => _databaseName;
1617

1718
public string GetSql()
18-
=> Invariant($"CREATE DATABASE [{_databaseName}]");
19+
{
20+
var sql = new StringBuilder();
21+
22+
sql.AppendLine(Invariant($"IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = '{_databaseName}')"));
23+
sql.AppendLine("BEGIN");
24+
sql.AppendLine(Invariant($"CREATE DATABASE [{_databaseName}]"));
25+
sql.AppendLine("END");
26+
27+
return sql.ToString();
28+
}
1929
}
2030
}

test/Serilog.Sinks.MSSqlServer.Tests/Sinks/MSSqlServer/Platform/SqlCreateDatabaseWriterTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public void GetSqlWritesCorrectCommand()
1212
{
1313
// Arrange
1414
const string databaseName = "LogDatabase";
15-
const string expectedResult = "CREATE DATABASE [LogDatabase]";
15+
const string expectedResult = "IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'LogDatabase')\r\nBEGIN\r\nCREATE DATABASE [LogDatabase]\r\nEND\r\n";
1616
var sut = new SqlCreateDatabaseWriter(databaseName);
1717

1818
// Act
@@ -27,7 +27,7 @@ public void GetSqlWritesCorrectCommandForDatabaseNameWithSpaces()
2727
{
2828
// Arrange
2929
const string databaseName = "Log Data Base";
30-
const string expectedResult = "CREATE DATABASE [Log Data Base]";
30+
const string expectedResult = "IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'Log Data Base')\r\nBEGIN\r\nCREATE DATABASE [Log Data Base]\r\nEND\r\n";
3131
var sut = new SqlCreateDatabaseWriter(databaseName);
3232

3333
// Act

0 commit comments

Comments
 (0)