@@ -42,6 +42,7 @@ foreach (IDdlStrategy strategy in options.DdlStrategies)
4242 //************************************************************************
4343 // Start of SQL file.
4444 //************************************************************************
45+ var databaseName = GetDatabaseName(strategy, options.DatabaseName);
4546 var filename = GetFileName(strategy, strategy.ScriptFileExtension);
4647 fileManager.StartNewFile(filename, strategy.Encoding);
4748
@@ -75,7 +76,7 @@ foreach (IDdlStrategy strategy in options.DdlStrategies)
7576<#
7677 if (strategy.IsReCreateDatabaseEnabled)
7778 {
78- var dropdb = strategy.WriteDropDatabase(options.DatabaseName );
79+ var dropdb = strategy.WriteDropDatabase(databaseName );
7980 if (!string.IsNullOrEmpty(dropdb))
8081 {
8182#>
@@ -88,7 +89,7 @@ foreach (IDdlStrategy strategy in options.DdlStrategies)
8889<#
8990 }
9091
91- var createdb = strategy.WriteCreateDatabase(options.DatabaseName );
92+ var createdb = strategy.WriteCreateDatabase(databaseName );
9293 if (!string.IsNullOrEmpty(createdb))
9394 {
9495#>
@@ -101,7 +102,7 @@ foreach (IDdlStrategy strategy in options.DdlStrategies)
101102<#
102103 }
103104
104- var usedb = strategy.WriteUseDatabase(options.DatabaseName );
105+ var usedb = strategy.WriteUseDatabase(databaseName );
105106 if (!string.IsNullOrEmpty(usedb))
106107 {
107108#>
@@ -269,47 +270,59 @@ CREATE INDEX <#= ifkName #> ON <#= strategy.GetFullyQualifiedName(fromTableName)
269270 Populate Tables
270271********************************************************************************/
271272<#
272- var sbFields = new StringBuilder() ;
273+ var maxRows = 1000 ;
273274 var sbValues = new StringBuilder();
274275 char delimiter = ',';
275276
276277 foreach (DataTable table in ds.Tables)
277278 {
278279 var tableName = strategy.GetFullyQualifiedName(table.TableName);
279- #>
280- <#
281- foreach (DataRow row in table.Rows)
280+
281+ var columns = table.Columns.Cast<DataColumn>()
282+ .Where(col => !col.AutoIncrement || strategy.PrimaryKeyStrategy == PrimaryKeyStrategy.None)
283+ .ToList();
284+
285+ var fields = string.Join($"{delimiter} ", columns
286+ .Select(col => $"{strategy.FormatName(col.ColumnName)}")
287+ .ToList());
288+
289+ for (var i = 0; i < table.Rows.Count; i++)
282290 {
283- sbFields.Length = 0 ;
291+ var row = table.Rows[i] ;
284292 sbValues.Length = 0;
285-
286- foreach (DataColumn col in table.Columns )
293+
294+ foreach (var col in columns )
287295 {
288- string value = row[col.ColumnName].ToString();
289- if ((col.AutoIncrement && strategy.PrimaryKeyStrategy != PrimaryKeyStrategy.None) || value.Length==0) continue;
290-
291- if (col.DataType == typeof(DateTime))
296+ var value = row[col.ColumnName].ToString();
297+ if (value.Length == 0 && col.AllowDBNull)
298+ {
299+ value = "NULL";
300+ }
301+ else if (col.DataType == typeof(DateTime))
292302 {
293303 value = strategy.FormatDateValue(value);
294304 }
295- else if (col.DataType == typeof(String ))
305+ else if (col.DataType == typeof(string ))
296306 {
297307 value = strategy.FormatStringValue(value);
298308 }
299309
300310 sbValues.AppendFormat("{0}{1} ", value, delimiter);
301- sbFields.AppendFormat("{0}{1} ", strategy.FormatName(col.ColumnName), delimiter);
302311 }
303312
304- var fields = sbFields.ToString().Trim().TrimEnd(delimiter);
305313 var values = sbValues.ToString().Trim().TrimEnd(delimiter);
314+ var terminator = (i == table.Rows.Count - 1 || (i > 0 && (i + 1) % maxRows == 0)) ? ";" : ",";
315+ if (i % maxRows == 0)
316+ {
306317#>
307- <#= string.Format("INSERT INTO {0} ({1}) VALUES ({2});", tableName, fields, values) #>
318+
319+ <#= $"INSERT INTO {tableName} ({fields}) VALUES" #>
308320<#
309- } // foreach DataRow
321+ }
310322#>
311-
323+ <#= $" ({values}){terminator}" #>
312324<#
325+ } // foreach DataRow
313326 } // foreach DataTable
314327#>
315328<#= strategy.WriteFinishCommit() #>
@@ -405,6 +418,17 @@ public class OutputFile {
405418 public string Description { get; set; }
406419}
407420
421+ private static string GetDatabaseName(IDdlStrategy strategy, string name)
422+ {
423+ var suffix = strategy.PrimaryKeyStrategy switch {
424+ PrimaryKeyStrategy.Identity => "_AutoIncrement",
425+ PrimaryKeyStrategy.Serial => "_Serial",
426+ _ => string.Empty
427+ };
428+
429+ return $"{name}{suffix}";
430+ }
431+
408432private static string GetFileName(IDdlStrategy strategy, string extension)
409433{
410434 var suffix = strategy.PrimaryKeyStrategy switch {
0 commit comments