private void CreateViews(StringBuilder sql, IEnumerable <LookupData> enums)
        {
            string schemaWithBrackets    = GetSchema("[", "].");
            string schema                = GetSchema();
            string descriptionDefinition = GenerateDescription ? ", CAST(Description as nvarchar(max)) as Description" : null;
            string description           = GenerateDescription ? ", Description" : null;

            string appendTuppleDelimiter = ", ";
            string appendDelimiter       = Environment.NewLine + "\t\t\t";
            string appendSelectDelimiter = "UNION" + appendDelimiter;

            Action <StringBuilder, LookupValue> appendTupleValue  = GenerateDescription ? (Action <StringBuilder, LookupValue>)AppendValueTupleWithDescription : AppendValueTuple;
            Action <StringBuilder, LookupValue> appendSelectValue = GenerateDescription ? (Action <StringBuilder, LookupValue>)AppendSelectValueWithDescription : AppendSelectValues;

            foreach (LookupData lookup in enums)
            {
                string tableName          = TableName(lookup.Name);
                string schemaAndTableName = TableName(lookup.Name, true);
                string idType             = SqlServerGenerationHelper.NumericSqlType(lookup.NumericType);

                sql.AppendLine($"IF (OBJECT_ID('{schemaAndTableName}', 'V') IS NOT NULL) EXEC ('DROP VIEW {schemaWithBrackets}[{tableName}]')");
                sql.AppendLine($"EXEC ('CREATE VIEW {schemaWithBrackets}[{tableName}] AS");
                sql.AppendLine($"\tSELECT CAST(Id as {idType}) as Id, CAST(Name as nvarchar({NameFieldLength:0})) as Name{descriptionDefinition}");
                sql.AppendLine("\tFROM (");

                if (lookup.Values.Count <= 1000)
                {
                    sql.AppendLine("\t\tVALUES");
                    ForEarchLookupValue(lookup, sql, appendDelimiter, appendTuppleDelimiter, appendTupleValue);
                }
                else
                {
                    ForEarchLookupValue(lookup, sql, appendDelimiter, appendSelectDelimiter, appendSelectValue);
                }

                sql.AppendLine();
                sql.AppendLine($"\t) as t(Id,Name{description})");
                sql.AppendLine("');");

                sql.AppendViewMetadataDescriptionLine(schema, tableName, DbObjectDescription);
            }
        }
        private string CreateTables(IEnumerable <LookupData> enums)
        {
            StringBuilder sql = new StringBuilder();

            string schema             = GetSchema();
            string schemaWithBrackets = GetSchema("[", "].");

            string description = GenerateDescription ? ", Description nvarchar(max)" : null;

            foreach (LookupData lookup in enums)
            {
                string tableName          = TableName(lookup.Name);
                string schemaAndTableName = TableName(lookup.Name, true);
                string idType             = SqlServerGenerationHelper.NumericSqlType(lookup.NumericType);

                sql.AppendLine($"IF OBJECT_ID('{schemaAndTableName}', 'U') IS NULL");
                sql.AppendLine("begin");
                sql.AppendLine($"\tCREATE TABLE {schemaWithBrackets}[{tableName}] (Id {idType} CONSTRAINT PK_{tableName} PRIMARY KEY, Name nvarchar({NameFieldLength:0}){description})");

                sql.AppendTableMetadataDescriptionLine(schema, tableName, DbObjectDescription, "\t");
                sql.AppendLine("end");
            }
            return(sql.ToString());
        }
 protected virtual string TableName(string enumName, bool addSchema = false)
 {
     return(SqlServerGenerationHelper.TableName(enumName, TableNamePrefix, TableNameSuffix, addSchema ? GetSchema() : null));
 }