You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
82 lines
5.5 KiB
82 lines
5.5 KiB
using OpenDBDiff.Schema.SQLServer.Generates.Model;
|
|
using System.Text;
|
|
|
|
namespace OpenDBDiff.Schema.SQLServer.Generates.Generates.SQLCommands
|
|
{
|
|
internal static class IndexSQLCommand
|
|
{
|
|
public static string Get(DatabaseInfo.SQLServerVersion version, DatabaseInfo.SQLServerEdition edition)
|
|
{
|
|
switch (version)
|
|
{
|
|
case DatabaseInfo.SQLServerVersion.SQLServer2005:
|
|
return Get2005();
|
|
|
|
case DatabaseInfo.SQLServerVersion.SQLServer2008:
|
|
case DatabaseInfo.SQLServerVersion.SQLServer2008R2:
|
|
return Get2008();
|
|
|
|
case DatabaseInfo.SQLServerVersion.SQLServerAzure10:
|
|
return GetAzure();
|
|
|
|
default:
|
|
if (edition == DatabaseInfo.SQLServerEdition.Azure)
|
|
return GetAzure();
|
|
else
|
|
return Get2008();
|
|
}
|
|
}
|
|
|
|
private static string Get2005()
|
|
{
|
|
StringBuilder sql = new StringBuilder();
|
|
sql.Append("SELECT OO.type AS ObjectType, IC.key_ordinal, C.user_type_id, I.object_id, dsidx.Name as FileGroup, C.column_id,C.Name AS ColumnName, I.Name, I.index_id, I.type, is_unique, ignore_dup_key, is_primary_key, is_unique_constraint, fill_factor, is_padded, is_disabled, allow_row_locks, allow_page_locks, IC.is_descending_key, IC.is_included_column, ISNULL(ST.no_recompute,0) AS NoAutomaticRecomputation ");
|
|
sql.Append("FROM sys.indexes I ");
|
|
sql.Append("INNER JOIN sys.objects OO ON OO.object_id = I.object_id ");
|
|
sql.Append("INNER JOIN sys.index_columns IC ON IC.index_id = I.index_id AND IC.object_id = I.object_id ");
|
|
sql.Append("INNER JOIN sys.data_spaces AS dsidx ON dsidx.data_space_id = I.data_space_id ");
|
|
sql.Append("INNER JOIN sys.columns C ON C.column_id = IC.column_id AND IC.object_id = C.object_id ");
|
|
sql.Append("LEFT JOIN sys.stats AS ST ON ST.stats_id = I.index_id AND ST.object_id = I.object_id ");
|
|
sql.Append("WHERE I.type IN (1,2,3) ");
|
|
sql.Append("AND is_unique_constraint = 0 AND is_primary_key = 0 "); //AND I.object_id = " + table.Id.ToString(CultureInfo.InvariantCulture) + " ");
|
|
sql.Append("AND objectproperty(I.object_id, 'IsMSShipped') <> 1 ");
|
|
sql.Append("ORDER BY I.object_id, I.Name, IC.column_id");
|
|
return sql.ToString();
|
|
}
|
|
|
|
private static string Get2008()
|
|
{
|
|
StringBuilder sql = new StringBuilder();
|
|
sql.Append("SELECT ISNULL(I.filter_definition,'') AS FilterDefinition, OO.type AS ObjectType, IC.key_ordinal, C.user_type_id, I.object_id, dsidx.Name as FileGroup, C.column_id,C.Name AS ColumnName, I.Name, I.index_id, I.type, is_unique, ignore_dup_key, is_primary_key, is_unique_constraint, fill_factor, is_padded, is_disabled, allow_row_locks, allow_page_locks, IC.is_descending_key, IC.is_included_column, ISNULL(ST.no_recompute,0) AS NoAutomaticRecomputation ");
|
|
sql.Append("FROM sys.indexes I ");
|
|
sql.Append("INNER JOIN sys.objects OO ON OO.object_id = I.object_id ");
|
|
sql.Append("INNER JOIN sys.index_columns IC ON IC.index_id = I.index_id AND IC.object_id = I.object_id ");
|
|
sql.Append("INNER JOIN sys.data_spaces AS dsidx ON dsidx.data_space_id = I.data_space_id ");
|
|
sql.Append("INNER JOIN sys.columns C ON C.column_id = IC.column_id AND IC.object_id = C.object_id ");
|
|
sql.Append("LEFT JOIN sys.stats AS ST ON ST.stats_id = I.index_id AND ST.object_id = I.object_id ");
|
|
sql.Append("WHERE I.type IN (1,2,3) ");
|
|
sql.Append("AND is_unique_constraint = 0 AND is_primary_key = 0 "); //AND I.object_id = " + table.Id.ToString(CultureInfo.InvariantCulture) + " ");
|
|
sql.Append("AND objectproperty(I.object_id, 'IsMSShipped') <> 1 ");
|
|
sql.Append("ORDER BY I.object_id, I.Name, IC.column_id");
|
|
return sql.ToString();
|
|
}
|
|
|
|
private static string GetAzure()
|
|
{
|
|
StringBuilder sql = new StringBuilder();
|
|
sql.Append("SELECT ISNULL(I.filter_definition,'') AS FilterDefinition, OO.type AS ObjectType, IC.key_ordinal, C.user_type_id, I.object_id, '' as FileGroup, C.column_id,C.Name AS ColumnName, I.Name, I.index_id, I.type, is_unique, ignore_dup_key, is_primary_key, is_unique_constraint, fill_factor, is_padded, is_disabled, allow_row_locks, allow_page_locks, IC.is_descending_key, IC.is_included_column, ISNULL(ST.no_recompute,0) AS NoAutomaticRecomputation ");
|
|
sql.Append("FROM sys.indexes I ");
|
|
sql.Append("INNER JOIN sys.objects OO ON OO.object_id = I.object_id ");
|
|
sql.Append("INNER JOIN sys.index_columns IC ON IC.index_id = I.index_id AND IC.object_id = I.object_id ");
|
|
//sql.Append("INNER JOIN sys.data_spaces AS dsidx ON dsidx.data_space_id = I.data_space_id ");
|
|
sql.Append("INNER JOIN sys.columns C ON C.column_id = IC.column_id AND IC.object_id = C.object_id ");
|
|
sql.Append("LEFT JOIN sys.stats AS ST ON ST.stats_id = I.index_id AND ST.object_id = I.object_id ");
|
|
sql.Append("WHERE I.type IN (1,2,3) ");
|
|
sql.Append("AND is_unique_constraint = 0 AND is_primary_key = 0 "); //AND I.object_id = " + table.Id.ToString(CultureInfo.InvariantCulture) + " ");
|
|
sql.Append("AND objectproperty(I.object_id, 'IsMSShipped') <> 1 ");
|
|
sql.Append("ORDER BY I.object_id, I.Name, IC.column_id");
|
|
return sql.ToString();
|
|
}
|
|
}
|
|
}
|