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.

73 lines
3.7 KiB

using OpenDBDiff.Schema.SQLServer.Generates.Model;
using System.Text;
namespace OpenDBDiff.Schema.SQLServer.Generates.Generates.SQLCommands
{
internal static class FullTextIndexSQLCommand
{
public static string Get(DatabaseInfo.SQLServerVersion version)
{
switch (version)
{
case DatabaseInfo.SQLServerVersion.SQLServer2005:
return Get2005();
default:
return Get2008();
}
}
private static string Get2005()
{
StringBuilder sql = new StringBuilder();
sql.Append("SELECT ");
sql.Append("FI.object_id, ");
sql.Append("T.Name AS TableName, ");
sql.Append("FC.name AS FullTextCatalogName, ");
sql.Append("I.name AS IndexName, ");
sql.Append("FI.is_enabled, ");
sql.Append("'['+ S.name + '].['+ T.name + '].[' + FC.name + ']' AS Name, ");
sql.Append("C.name as ColumnName, ");
sql.Append("FI.change_tracking_state_desc AS ChangeTracking, ");
sql.Append("FL.name AS LanguageName ");
sql.Append("FROM sys.fulltext_indexes FI ");
sql.Append("INNER JOIN sys.fulltext_catalogs FC ON FC.fulltext_catalog_id = FI.fulltext_catalog_id ");
sql.Append("INNER JOIN sys.indexes I ON I.index_id = FI.unique_index_id and I.object_id = FI.object_id ");
sql.Append("INNER JOIN sys.tables T ON T.object_id = FI.object_id ");
sql.Append("INNER JOIN sys.schemas S ON S.schema_id = T.schema_id ");
sql.Append("INNER JOIN sys.fulltext_index_columns FIC ON FIC.object_id = FI.object_id ");
sql.Append("INNER JOIN sys.columns C ON C.object_id = FIC.object_id AND C.column_id = FIC.column_id ");
sql.Append("INNER JOIN sys.fulltext_languages FL ON FL.lcid = FIC.language_id ");
sql.Append("ORDER BY OBJECT_NAME(FI.object_id), I.name ");
return sql.ToString();
}
private static string Get2008()
{
StringBuilder sql = new StringBuilder();
sql.Append("SELECT ");
sql.Append("FI.object_id, ");
sql.Append("T.Name AS TableName, ");
sql.Append("FC.name AS FullTextCatalogName, ");
sql.Append("I.name AS IndexName, ");
sql.Append("FI.is_enabled, ");
sql.Append("'['+ S.name + '].['+ T.name + '].[' + FC.name + ']' AS Name, ");
sql.Append("C.name as ColumnName, ");
sql.Append("FL.name AS LanguageName,");
sql.Append("DS.name AS FileGroupName, ");
sql.Append("FI.change_tracking_state_desc AS ChangeTracking ");
sql.Append("FROM sys.fulltext_indexes FI ");
sql.Append("INNER JOIN sys.fulltext_catalogs FC ON FC.fulltext_catalog_id = FI.fulltext_catalog_id ");
sql.Append("INNER JOIN sys.indexes I ON I.index_id = FI.unique_index_id and I.object_id = FI.object_id ");
sql.Append("INNER JOIN sys.tables T ON T.object_id = FI.object_id ");
sql.Append("INNER JOIN sys.schemas S ON S.schema_id = T.schema_id ");
sql.Append("INNER JOIN sys.fulltext_index_columns FIC ON FIC.object_id = FI.object_id ");
sql.Append("INNER JOIN sys.columns C ON C.object_id = FIC.object_id AND C.column_id = FIC.column_id ");
sql.Append("INNER JOIN sys.data_spaces DS ON DS.data_space_id = FI.data_space_id ");
sql.Append("INNER JOIN sys.fulltext_languages FL ON FL.lcid = FIC.language_id ");
sql.Append("ORDER BY OBJECT_NAME(FI.object_id), I.name ");
return sql.ToString();
}
}
}