Initial commit

This commit is contained in:
2021-08-26 20:59:17 +02:00
commit 3afa4c82ef
524 changed files with 52428 additions and 0 deletions

View File

@@ -0,0 +1,192 @@
using OpenDBDiff.Schema.SQLServer.Generates.Model;
using System.Text;
namespace OpenDBDiff.Schema.SQLServer.Generates.Generates.SQLCommands
{
internal static class ConstraintSQLCommand
{
public static string GetUniqueKey(DatabaseInfo.SQLServerVersion version, DatabaseInfo.SQLServerEdition edition)
{
switch (version)
{
case DatabaseInfo.SQLServerVersion.SQLServer2005:
return GetUniqueKey2005();
case DatabaseInfo.SQLServerVersion.SQLServerAzure10:
return GetUniqueKeyAzure();
default:
if (edition == DatabaseInfo.SQLServerEdition.Azure)
return GetUniqueKeyAzure();
else
return GetUniqueKey2008();
}
}
public static string GetCheck(DatabaseInfo.SQLServerVersion version)
{
if (version == DatabaseInfo.SQLServerVersion.SQLServer2005) return GetCheck2005();
//Fall back to highest compatible version
return GetCheck2008();
}
public static string GetPrimaryKey(DatabaseInfo.SQLServerVersion version, Table table)
{
switch (version)
{
case DatabaseInfo.SQLServerVersion.SQLServer2000:
return GetPrimaryKey2000(table);
case DatabaseInfo.SQLServerVersion.SQLServer2005:
return GetPrimaryKey2005();
case DatabaseInfo.SQLServerVersion.SQLServerAzure10:
return GetPrimaryKeyAzure();
default:
return GetPrimaryKey2008();
}
}
private static string GetUniqueKeyAzure()
{
//File Groups not supported in Azure
StringBuilder sql = new StringBuilder();
sql.Append("SELECT O.type as ObjectType, S.Name as Owner, I.object_Id AS id,'' as FileGroup, C.user_type_id, C.column_id, I.Index_id, C.Name AS ColumnName, I.Name, I.type, I.fill_factor, I.is_padded, I.allow_row_locks, I.allow_page_locks, I.ignore_dup_key, I.is_disabled, IC.is_descending_key, IC.is_included_column ");
sql.Append("FROM sys.indexes I ");
sql.Append("INNER JOIN sys.objects O ON O.object_id = I.object_id ");
sql.Append("INNER JOIN sys.schemas S ON S.schema_id = O.schema_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.columns C ON C.column_id = IC.column_id AND IC.object_id = C.object_id ");
//sql.Append("LEFT JOIN sys.data_spaces AS dsidx ON dsidx.data_space_id = I.data_space_id ");
sql.Append("WHERE is_unique_constraint = 1 AND O.type <> 'TF' ORDER BY I.object_id,I.Name");
return sql.ToString();
}
private static string GetUniqueKey2008()
{
StringBuilder sql = new StringBuilder();
sql.Append("SELECT O.type as ObjectType, S.Name as Owner, I.object_Id AS id,dsidx.Name as FileGroup, C.user_type_id, C.column_id, I.Index_id, C.Name AS ColumnName, I.Name, I.type, I.fill_factor, I.is_padded, I.allow_row_locks, I.allow_page_locks, I.ignore_dup_key, I.is_disabled, IC.is_descending_key, IC.is_included_column ");
sql.Append("FROM sys.indexes I ");
sql.Append("INNER JOIN sys.objects O ON O.object_id = I.object_id ");
sql.Append("INNER JOIN sys.schemas S ON S.schema_id = O.schema_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.columns C ON C.column_id = IC.column_id AND IC.object_id = C.object_id ");
sql.Append("LEFT JOIN sys.data_spaces AS dsidx ON dsidx.data_space_id = I.data_space_id ");
sql.Append("WHERE is_unique_constraint = 1 AND O.type <> 'TF' ORDER BY I.object_id,I.Name");
return sql.ToString();
}
private static string GetUniqueKey2005()
{
StringBuilder sql = new StringBuilder();
sql.Append("SELECT O.type as ObjectType, S.Name as Owner, I.object_Id AS id,dsidx.Name as FileGroup, C.user_type_id, C.column_id, I.Index_id, C.Name AS ColumnName, I.Name, I.type, I.fill_factor, I.is_padded, I.allow_row_locks, I.allow_page_locks, I.ignore_dup_key, I.is_disabled, IC.is_descending_key, IC.is_included_column ");
sql.Append("FROM sys.indexes I ");
sql.Append("INNER JOIN sys.objects O ON O.object_id = I.object_id ");
sql.Append("INNER JOIN sys.schemas S ON S.schema_id = O.schema_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.columns C ON C.column_id = IC.column_id AND IC.object_id = C.object_id ");
sql.Append("LEFT JOIN sys.data_spaces AS dsidx ON dsidx.data_space_id = I.data_space_id ");
sql.Append("WHERE is_unique_constraint = 1 AND O.type <> 'TF' ORDER BY I.object_id,I.Name");
return sql.ToString();
}
private static string GetCheck2008()
{
string sql;
sql = "SELECT ";
sql += "CC.parent_object_id, ";
sql += "O.type as ObjectType, ";
sql += "CC.object_id AS ID, ";
sql += "CC.parent_column_id, ";
sql += "CC.name, ";
sql += "CC.type, ";
sql += "CC.definition, ";
sql += "CC.is_disabled, ";
sql += "CC.is_not_trusted AS WithCheck, ";
sql += "CC.is_not_for_replication, ";
sql += "0, ";
sql += "schema_name(CC.schema_id) AS Owner ";
sql += "FROM sys.check_constraints CC ";
sql += "INNER JOIN sys.objects O ON O.object_id = CC.parent_object_id ";
sql += "ORDER BY CC.parent_object_id,CC.name";
return sql;
}
private static string GetCheck2005()
{
string sql;
sql = "SELECT ";
sql += "CC.parent_object_id, ";
sql += "O.Type as ObjectType, ";
sql += "CC.object_id AS ID, ";
sql += "CC.parent_column_id, ";
sql += "CC.name, ";
sql += "CC.type, ";
sql += "CC.definition, ";
sql += "CC.is_disabled, ";
sql += "CC.is_not_trusted AS WithCheck, ";
sql += "CC.is_not_for_replication, ";
sql += "0, ";
sql += "schema_name(CC.schema_id) AS Owner ";
sql += "FROM sys.check_constraints CC ";
sql += "INNER JOIN sys.objects O ON O.object_id = CC.parent_object_id ";
sql += "ORDER BY CC.parent_object_id,CC.name";
return sql;
}
private static string GetPrimaryKeyAzure()
{
//File Groups not supported in Azure
StringBuilder sql = new StringBuilder();
sql.Append("SELECT O.type as ObjectType, S.Name as Owner, IC.key_ordinal, C.user_type_id, I.object_id AS ID, '' AS FileGroup, C.column_id, I.Index_id, C.Name AS ColumnName, I.Name, I.type, I.fill_factor, I.is_padded, I.allow_row_locks, I.allow_page_locks, I.ignore_dup_key, I.is_disabled, IC.is_descending_key, IC.is_included_column, CONVERT(bit,INDEXPROPERTY(I.object_id,I.name,'IsAutoStatistics')) AS IsAutoStatistics ");
sql.Append("FROM sys.indexes I ");
sql.Append("INNER JOIN sys.objects O ON O.object_id = I.object_id ");
sql.Append("INNER JOIN sys.schemas S ON S.schema_id = O.schema_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.columns C ON C.column_id = IC.column_id AND IC.object_id = C.object_id ");
//sql.Append("LEFT JOIN sys.data_spaces AS dsidx ON dsidx.data_space_id = I.data_space_id ");
sql.Append("WHERE is_primary_key = 1 AND O.type <> 'TF' ORDER BY I.object_id");
return sql.ToString();
}
private static string GetPrimaryKey2008()
{
StringBuilder sql = new StringBuilder();
sql.Append("SELECT O.type as ObjectType, S.Name as Owner, IC.key_ordinal, C.user_type_id, I.object_id AS ID, dsidx.Name AS FileGroup, C.column_id, I.Index_id, C.Name AS ColumnName, I.Name, I.type, I.fill_factor, I.is_padded, I.allow_row_locks, I.allow_page_locks, I.ignore_dup_key, I.is_disabled, IC.is_descending_key, IC.is_included_column, CONVERT(bit,INDEXPROPERTY(I.object_id,I.name,'IsAutoStatistics')) AS IsAutoStatistics ");
sql.Append("FROM sys.indexes I ");
sql.Append("INNER JOIN sys.objects O ON O.object_id = I.object_id ");
sql.Append("INNER JOIN sys.schemas S ON S.schema_id = O.schema_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.columns C ON C.column_id = IC.column_id AND IC.object_id = C.object_id ");
sql.Append("LEFT JOIN sys.data_spaces AS dsidx ON dsidx.data_space_id = I.data_space_id ");
sql.Append("WHERE is_primary_key = 1 AND O.type <> 'TF' ORDER BY I.object_id");
return sql.ToString();
}
private static string GetPrimaryKey2005()
{
StringBuilder sql = new StringBuilder();
sql.Append("SELECT O.type as ObjectType, S.Name as Owner, IC.key_ordinal, C.user_type_id, I.object_id AS ID, dsidx.Name AS FileGroup, C.column_id, I.Index_id, C.Name AS ColumnName, I.Name, I.type, I.fill_factor, I.is_padded, I.allow_row_locks, I.allow_page_locks, I.ignore_dup_key, I.is_disabled, IC.is_descending_key, IC.is_included_column, CONVERT(bit,INDEXPROPERTY(I.object_id,I.name,'IsAutoStatistics')) AS IsAutoStatistics ");
sql.Append("FROM sys.indexes I ");
sql.Append("INNER JOIN sys.objects O ON O.object_id = I.object_id ");
sql.Append("INNER JOIN sys.schemas S ON S.schema_id = O.schema_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.columns C ON C.column_id = IC.column_id AND IC.object_id = C.object_id ");
sql.Append("INNER JOIN sys.data_spaces AS dsidx ON dsidx.data_space_id = I.data_space_id ");
sql.Append("WHERE is_primary_key = 1 AND O.type <> 'TF' ORDER BY I.object_id");
return sql.ToString();
}
private static string GetPrimaryKey2000(Table table)
{
StringBuilder sql = new StringBuilder();
sql.Append("SELECT CONVERT(tinyint,CASE WHEN SI.indid = 0 THEN 0 WHEN SI.indid = 1 THEN 1 WHEN SI.indid > 1 THEN 2 END) AS Type,f.groupname AS FileGroup,CONVERT(int,SI.indid) AS Index_id, CONVERT(int,SI.indid) AS ID, SI.name, SC.colid, SC.Name AS ColumnName, CONVERT(bit,0) AS is_included_column, SIK.keyno AS key_ordinal, CONVERT(bit,INDEXPROPERTY(SI.id,SI.name,'IsPadIndex')) AS is_padded, CONVERT(bit,INDEXPROPERTY(SI.id,SI.name,'IsRowLockDisallowed')) AS allow_row_locks, CONVERT(bit,INDEXPROPERTY(SI.id,SI.name,'IsPageLockDisallowed')) AS allow_page_locks, CONVERT(bit,INDEXPROPERTY(SI.id,SI.name,'IsAutoStatistics')) AS IsAutoStatistics, CONVERT(tinyint,INDEXPROPERTY(SI.id,SI.name,'IndexFillFactor')) AS fill_factor, INDEXKEY_PROPERTY(SI.id, SI.indid,SC.colid,'IsDescending') AS is_descending_key, CONVERT(bit,0) AS is_disabled, CONVERT(bit,0) AS is_included_column ");
sql.Append("FROM sysindexes SI INNER JOIN sysindexkeys SIK ON SI.indid = SIK.indid AND SIK.id = SI.ID ");
sql.Append("INNER JOIN syscolumns SC ON SC.colid = SIK.colid AND SC.id = SI.ID ");
sql.Append("inner join sysfilegroups f on f.groupid = SI.groupid ");
sql.Append("WHERE (SI.status & 0x800) = 0x800 AND SI.id = " + table.Id.ToString() + " ORDER BY SIK.keyno");
return sql.ToString();
}
}
}

View File

@@ -0,0 +1,67 @@
using OpenDBDiff.Schema.SQLServer.Generates.Model;
namespace OpenDBDiff.Schema.SQLServer.Generates.Generates.SQLCommands
{
internal class DatabaseSQLCommand
{
public static string GetVersion(Database databaseSchema)
{
string sql;
sql = "SELECT SERVERPROPERTY('productversion') AS Version, SERVERPROPERTY('EngineEdition') AS Edition";
return sql;
}
public static string Get(DatabaseInfo.SQLServerVersion version, DatabaseInfo.SQLServerEdition edition, Database databaseSchema)
{
switch (version)
{
case DatabaseInfo.SQLServerVersion.SQLServer2005:
return Get2005(databaseSchema);
case DatabaseInfo.SQLServerVersion.SQLServer2008:
return Get2008(databaseSchema);
case DatabaseInfo.SQLServerVersion.SQLServer2008R2:
return Get2008R2(databaseSchema);
case DatabaseInfo.SQLServerVersion.SQLServerAzure10:
return GetAzure(databaseSchema);
default:
if (edition == DatabaseInfo.SQLServerEdition.Azure)
return GetAzure(databaseSchema);
else
return Get2008R2(databaseSchema);
}
}
private static string Get2005(Database databaseSchema)
{
string sql;
sql = "SELECT DATABASEPROPERTYEX('" + databaseSchema.Name + "','IsFulltextEnabled') AS IsFullTextEnabled, DATABASEPROPERTYEX('" + databaseSchema.Name + "','Collation') AS Collation";
return sql;
}
private static string Get2008(Database databaseSchema)
{
string sql;
sql = "SELECT DATABASEPROPERTYEX('" + databaseSchema.Name + "','IsFulltextEnabled') AS IsFullTextEnabled, DATABASEPROPERTYEX('" + databaseSchema.Name + "','Collation') AS Collation";
return sql;
}
private static string Get2008R2(Database databaseSchema)
{
string sql;
sql = "SELECT DATABASEPROPERTYEX('" + databaseSchema.Name + "','IsFulltextEnabled') AS IsFullTextEnabled, DATABASEPROPERTYEX('" + databaseSchema.Name + "','Collation') AS Collation";
return sql;
}
private static string GetAzure(Database databaseSchema)
{
string sql;
//DATABASEPROPERTYEX('IsFullTextEnabled') is deprecated http://technet.microsoft.com/en-us/library/cc646010(SQL.110).aspx
sql = "SELECT 0 AS IsFullTextEnabled, DATABASEPROPERTYEX('" + databaseSchema.Name + "','Collation') AS Collation";
return sql;
}
}
}

View File

@@ -0,0 +1,72 @@
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();
}
}
}

View File

@@ -0,0 +1,111 @@
using OpenDBDiff.Schema.SQLServer.Generates.Model;
using System.Text;
namespace OpenDBDiff.Schema.SQLServer.Generates.Generates.SQLCommands
{
internal static class FunctionSQLCommand
{
public static string Get(DatabaseInfo.SQLServerVersion version, DatabaseInfo.SQLServerEdition edition)
{
switch (version)
{
case DatabaseInfo.SQLServerVersion.SQLServer2005:
return Get2005();
case DatabaseInfo.SQLServerVersion.SQLServer2008:
return Get2008();
case DatabaseInfo.SQLServerVersion.SQLServerAzure10:
return GetAzure();
default:
if (edition == DatabaseInfo.SQLServerEdition.Azure)
return GetAzure();
else
return Get2008();
}
}
private static string Get2005()
{
string sql = "";
sql += "select distinct ";
sql += "T.name AS ReturnType, PP.max_length, PP.precision, PP.Scale, ";
sql += "ISNULL(CONVERT(varchar,AM.execute_as_principal_id),'CALLER') as ExecuteAs, ";
sql += "P.type, ";
sql += "AF.name AS assembly_name, ";
sql += "AM.assembly_class, ";
sql += "AM.assembly_id, ";
sql += "AM.assembly_method, ";
sql += "ISNULL('[' + S3.Name + '].[' + object_name(D2.object_id) + ']','') AS DependOut, '[' + S2.Name + '].[' + object_name(D.referenced_major_id) + ']' AS TableName, D.referenced_major_id, OBJECTPROPERTY (P.object_id,'IsSchemaBound') AS IsSchemaBound, P.object_id, S.name as owner, P.name as name from sys.objects P ";
sql += "INNER JOIN sys.schemas S ON S.schema_id = P.schema_id ";
sql += "LEFT JOIN sys.sql_dependencies D ON P.object_id = D.object_id ";
sql += "LEFT JOIN sys.objects O ON O.object_id = D.referenced_major_id ";
sql += "LEFT JOIN sys.schemas S2 ON S2.schema_id = O.schema_id ";
sql += "LEFT JOIN sys.sql_dependencies D2 ON P.object_id = D2.referenced_major_id ";
sql += "LEFT JOIN sys.objects O2 ON O2.object_id = D2.object_id ";
sql += "LEFT JOIN sys.schemas S3 ON S3.schema_id = O2.schema_id ";
sql += "LEFT JOIN sys.assembly_modules AM ON AM.object_id = P.object_id ";
sql += "LEFT JOIN sys.assemblies AF ON AF.assembly_id = AM.assembly_id ";
sql += "LEFT JOIN sys.parameters PP ON PP.object_id = AM.object_id AND PP.parameter_id = 0 and PP.is_output = 1 ";
sql += "LEFT JOIN sys.types T ON T.system_type_id = PP.system_type_id ";
sql += "WHERE P.type IN ('IF','FN','TF','FS') ORDER BY P.object_id";
return sql;
}
private static string Get2008()
{
var sql = new StringBuilder();
sql.AppendLine("SELECT DISTINCT ");
sql.AppendLine("T.name AS ReturnType, PP.max_length, PP.precision, PP.Scale, ");
sql.AppendLine("ISNULL(CONVERT(varchar,AM.execute_as_principal_id),'CALLER') as ExecuteAs, ");
sql.AppendLine("P.type, ");
sql.AppendLine("AF.name AS assembly_name, ");
sql.AppendLine("AM.assembly_class, ");
sql.AppendLine("AM.assembly_id, ");
sql.AppendLine("AM.assembly_method, ");
sql.AppendLine("ISNULL('[' + S3.Name + '].[' + object_name(D2.object_id) + ']','') AS DependOut, '[' + S2.Name + '].[' + object_name(D.referenced_major_id) + ']' AS TableName, D.referenced_major_id, OBJECTPROPERTY (P.object_id,'IsSchemaBound') AS IsSchemaBound, P.object_id, S.name as owner, P.name as name from sys.objects P ");
sql.AppendLine("INNER JOIN sys.schemas S ON S.schema_id = P.schema_id ");
sql.AppendLine("LEFT JOIN sys.sql_dependencies D ON P.object_id = D.object_id ");
sql.AppendLine("LEFT JOIN sys.objects O ON O.object_id = D.referenced_major_id ");
sql.AppendLine("LEFT JOIN sys.schemas S2 ON S2.schema_id = O.schema_id ");
sql.AppendLine("LEFT JOIN sys.sql_dependencies D2 ON P.object_id = D2.referenced_major_id ");
sql.AppendLine("LEFT JOIN sys.objects O2 ON O2.object_id = D2.object_id ");
sql.AppendLine("LEFT JOIN sys.schemas S3 ON S3.schema_id = O2.schema_id ");
sql.AppendLine("LEFT JOIN sys.assembly_modules AM ON AM.object_id = P.object_id ");
sql.AppendLine("LEFT JOIN sys.assemblies AF ON AF.assembly_id = AM.assembly_id ");
sql.AppendLine("LEFT JOIN sys.parameters PP ON PP.object_id = AM.object_id AND PP.parameter_id = 0 and PP.is_output = 1 ");
sql.AppendLine("LEFT JOIN sys.types T ON T.system_type_id = PP.system_type_id ");
sql.AppendLine("WHERE P.type IN ('IF','FN','TF','FS') ORDER BY P.object_id");
return sql.ToString();
}
private static string GetAzure()
{
var sql = new StringBuilder();
sql.AppendLine("SELECT DISTINCT ");
sql.AppendLine("T.name AS ReturnType, PP.max_length, PP.precision, PP.Scale, ");
sql.AppendLine("ISNULL(CONVERT(varchar,AM.execute_as_principal_id),'CALLER') as ExecuteAs, ");
sql.AppendLine("P.type, ");
sql.AppendLine("AF.name AS assembly_name, ");
sql.AppendLine("AM.assembly_class, ");
sql.AppendLine("AM.assembly_id, ");
sql.AppendLine("AM.assembly_method, ");
sql.AppendLine("ISNULL('[' + S3.Name + '].[' + object_name(D2.referencing_id) + ']','') AS DependOut, ");
sql.AppendLine("'[' + S2.Name + '].[' + object_name(D.referenced_id) + ']' AS TableName, D.referenced_id AS referenced_major_id, OBJECTPROPERTY (P.object_id,'IsSchemaBound') AS IsSchemaBound, P.object_id, S.name as owner, P.name as name from sys.objects P ");
sql.AppendLine("INNER JOIN sys.schemas S ON S.schema_id = P.schema_id ");
sql.AppendLine("LEFT JOIN sys.sql_expression_dependencies D ON P.object_id = D.referencing_id ");
sql.AppendLine("LEFT JOIN sys.objects O ON O.object_id = D.referenced_id ");
sql.AppendLine("LEFT JOIN sys.schemas S2 ON S2.schema_id = O.schema_id ");
sql.AppendLine("LEFT JOIN sys.sql_expression_dependencies D2 ON P.object_id = D2.referenced_id ");
sql.AppendLine("LEFT JOIN sys.objects O2 ON O2.object_id = D2.referencing_id ");
sql.AppendLine("LEFT JOIN sys.schemas S3 ON S3.schema_id = O2.schema_id ");
sql.AppendLine("CROSS JOIN (SELECT null as object_id, null as execute_as_principal_id, null as assembly_class, null as assembly_id, null as assembly_method) AS AM ");
sql.AppendLine("CROSS JOIN (SELECT null AS name) AS AF");
sql.AppendLine("LEFT JOIN sys.parameters PP ON PP.object_id = AM.object_id AND PP.parameter_id = 0 and PP.is_output = 1 ");
sql.AppendLine("LEFT JOIN sys.types T ON T.system_type_id = PP.system_type_id ");
sql.AppendLine("WHERE P.type IN ('IF','FN','TF','FS') ORDER BY P.object_id");
return sql.ToString();
}
}
}

View File

@@ -0,0 +1,81 @@
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();
}
}
}

View File

@@ -0,0 +1,166 @@
using OpenDBDiff.Schema.SQLServer.Generates.Model;
using System.Text;
namespace OpenDBDiff.Schema.SQLServer.Generates.Generates.SQLCommands
{
internal static class TableSQLCommand
{
#region Table Count
public static string GetTableCount(DatabaseInfo.SQLServerVersion version, DatabaseInfo.SQLServerEdition edition)
{
switch (version)
{
case DatabaseInfo.SQLServerVersion.SQLServer2000:
return GetTableCount2000();
default:
return GetTableCount2005();
}
}
private static string GetTableCount2000()
{
return "SELECT Count(*) FROM sysobjects SO WHERE type = 'U'";
}
private static string GetTableCount2005()
{
return "SELECT Count(*) from sys.tables";
}
#endregion Table Count
#region Table Detail
public static string GetTableDetail(DatabaseInfo.SQLServerVersion version, DatabaseInfo.SQLServerEdition edition)
{
switch (version)
{
case DatabaseInfo.SQLServerVersion.SQLServer2000:
return GetTableDetail2000();
case DatabaseInfo.SQLServerVersion.SQLServer2005:
return GetTableDetail2005();
case DatabaseInfo.SQLServerVersion.SQLServer2008:
case DatabaseInfo.SQLServerVersion.SQLServer2008R2:
return GetTableDetail2008();
case DatabaseInfo.SQLServerVersion.SQLServerAzure10:
return GetTableDetailAzure();
default:
if (edition == DatabaseInfo.SQLServerEdition.Azure)
return GetTableDetailAzure();
else
return GetTableDetail2008();
}
}
private static string GetTableDetailAzure()
{
var sql = new StringBuilder();
sql.AppendLine("SELECT DISTINCT 0 AS HasChangeTrackingTrackColumn, 0 AS HasChangeTracking, TTT.lock_escalation_desc, T.type AS ObjectType, C.Name, C.is_filestream, C.is_sparse, S4.Name as OwnerType,C.user_type_id, C.Column_Id AS ID, C.max_length AS Size, C.Precision, C.Scale, ISNULL(C.Collation_Name,'') as Collation, C.Is_nullable AS IsNullable, C.Is_RowGuidcol AS IsRowGuid, C.Is_Computed AS IsComputed, C.Is_Identity AS IsIdentity, COLUMNPROPERTY(T.object_id,C.name,'IsIdNotForRepl') AS IsIdentityRepl,IDENT_SEED('[' + S1.name + '].[' + T.Name + ']') AS IdentSeed, IDENT_INCR('[' + S1.name + '].[' + T.Name + ']') AS IdentIncrement, ISNULL(CC.Definition,'') AS Formula, ISNULL(CC.Is_Persisted,0) AS FormulaPersisted, ");
sql.AppendLine("CASE WHEN ISNULL(DEP.referencing_minor_id,0) = 0 THEN 0 ELSE 1 END AS HasComputedFormula, CASE WHEN ISNULL(IC.column_id,0) = 0 THEN 0 ELSE 1 END AS HasIndex, TY.Name AS Type, '[' + S3.Name + '].' + XSC.Name AS XMLSchema, C.Is_xml_document, TY.is_user_defined, ");
sql.AppendLine("ISNULL(TT.Name,T.Name) AS TableName, T.object_id AS TableId,S1.name AS TableOwner,Text_In_Row_limit, large_value_types_out_of_row,ISNULL(objectproperty(T.object_id, N'TableHasVarDecimalStorageFormat'),0) AS HasVarDecimal,OBJECTPROPERTY(T.OBJECT_ID,'TableHasClustIndex') AS HasClusteredIndex, ");
sql.AppendLine(" '' AS FileGroup, '' AS FileGroupText, '' AS FileGroupStream,ISNULL(DC.object_id,0) AS DefaultId, DC.name AS DefaultName, DC.definition AS DefaultDefinition, C.rule_object_id, C.default_object_id ");
sql.AppendLine("FROM sys.columns C ");
sql.AppendLine("INNER JOIN sys.objects T ON T.object_id = C.object_id ");
sql.AppendLine("INNER JOIN sys.types TY ON TY.user_type_id = C.user_type_id ");
sql.AppendLine("LEFT JOIN sys.indexes IDX ON IDX.object_id = T.object_id and IDX.index_id < 2 ");
//sql.Append("LEFT JOIN sys.data_spaces AS DSIDX ON DSIDX.data_space_id = IDX.data_space_id ");
sql.AppendLine("LEFT JOIN sys.table_types TT ON TT.type_table_object_id = C.object_id ");
sql.AppendLine("LEFT JOIN sys.tables TTT ON TTT.object_id = C.object_id ");
sql.AppendLine("LEFT JOIN sys.schemas S1 ON (S1.schema_id = TTT.schema_id and T.type = 'U') OR (S1.schema_id = TT.schema_id and T.type = 'TT')");
sql.AppendLine("LEFT JOIN sys.xml_schema_collections XSC ON XSC.xml_collection_id = C.xml_collection_id ");
sql.AppendLine("LEFT JOIN sys.schemas S3 ON S3.schema_id = XSC.schema_id ");
sql.AppendLine("LEFT JOIN sys.schemas S4 ON S4.schema_id = TY.schema_id ");
sql.AppendLine("LEFT JOIN sys.computed_columns CC ON CC.column_id = C.column_Id AND C.object_id = CC.object_id ");
sql.AppendLine("LEFT JOIN sys.sql_expression_dependencies DEP ON DEP.referenced_id = C.object_id AND DEP.referenced_minor_id = C.column_Id AND DEP.referencing_id = C.object_id ");
sql.AppendLine("LEFT JOIN sys.index_columns IC ON IC.object_id = T.object_id AND IC.column_Id = C.column_Id ");
//sql.Append("LEFT JOIN sys.data_spaces AS lob ON lob.data_space_id = TTT.lob_data_space_id ");
//sql.Append("LEFT JOIN sys.data_spaces AS filestr ON filestr.data_space_id = TTT.filestream_data_space_id ");
sql.AppendLine("LEFT JOIN sys.default_constraints DC ON DC.parent_object_id = T.object_id AND parent_column_id = C.Column_Id ");
//sql.Append("LEFT JOIN sys.change_tracking_tables CTT ON CTT.object_id = T.object_id ");
sql.AppendLine("WHERE T.type IN ('U','TT') ");
sql.AppendLine("ORDER BY ISNULL(TT.Name,T.Name),T.object_id,C.column_id");
return sql.ToString();
}
private static string GetTableDetail2008()
{
string sql = "";
sql += "SELECT DISTINCT (CASE WHEN ISNULL(CTT.is_track_columns_updated_on,0) <> 0 THEN is_track_columns_updated_on ELSE 0 END) AS HasChangeTrackingTrackColumn, (CASE WHEN ISNULL(CTT.object_id,0) <> 0 THEN 1 ELSE 0 END) AS HasChangeTracking, TTT.lock_escalation_desc, T.type AS ObjectType, C.Name, C.is_filestream, C.is_sparse, S4.Name as OwnerType,C.user_type_id, C.Column_Id AS ID, C.max_length AS Size, C.Precision, C.Scale, ISNULL(C.Collation_Name,'') as Collation, C.Is_nullable AS IsNullable, C.Is_RowGuidcol AS IsRowGuid, C.Is_Computed AS IsComputed, C.Is_Identity AS IsIdentity, COLUMNPROPERTY(T.object_id,C.name,'IsIdNotForRepl') AS IsIdentityRepl,IDENT_SEED('[' + S1.name + '].[' + T.Name + ']') AS IdentSeed, IDENT_INCR('[' + S1.name + '].[' + T.Name + ']') AS IdentIncrement, ISNULL(CC.Definition,'') AS Formula, ISNULL(CC.Is_Persisted,0) AS FormulaPersisted, CASE WHEN ISNULL(DEP.column_id,0) = 0 THEN 0 ELSE 1 END AS HasComputedFormula, CASE WHEN ISNULL(IC.column_id,0) = 0 THEN 0 ELSE 1 END AS HasIndex, TY.Name AS Type, '[' + S3.Name + '].' + XSC.Name AS XMLSchema, C.Is_xml_document, TY.is_user_defined, ISNULL(TT.Name,T.Name) AS TableName, T.object_id AS TableId,S1.name AS TableOwner,Text_In_Row_limit, large_value_types_out_of_row,ISNULL(objectproperty(T.object_id, N'TableHasVarDecimalStorageFormat'),0) AS HasVarDecimal,OBJECTPROPERTY(T.OBJECT_ID,'TableHasClustIndex') AS HasClusteredIndex,DSIDX.Name AS FileGroup,ISNULL(lob.Name,'') AS FileGroupText, ISNULL(filestr.Name,'') AS FileGroupStream,ISNULL(DC.object_id,0) AS DefaultId, DC.name AS DefaultName, DC.definition AS DefaultDefinition, C.rule_object_id, C.default_object_id ";
sql += "FROM sys.columns C ";
sql += "INNER JOIN sys.objects T ON T.object_id = C.object_id ";
sql += "INNER JOIN sys.types TY ON TY.user_type_id = C.user_type_id ";
sql += "LEFT JOIN sys.indexes IDX ON IDX.object_id = T.object_id and IDX.index_id < 2 ";
sql += "LEFT JOIN sys.data_spaces AS DSIDX ON DSIDX.data_space_id = IDX.data_space_id ";
sql += "LEFT JOIN sys.table_types TT ON TT.type_table_object_id = C.object_id ";
sql += "LEFT JOIN sys.tables TTT ON TTT.object_id = C.object_id ";
sql += "LEFT JOIN sys.schemas S1 ON (S1.schema_id = TTT.schema_id and T.type = 'U') OR (S1.schema_id = TT.schema_id and T.type = 'TT')";
sql += "LEFT JOIN sys.xml_schema_collections XSC ON XSC.xml_collection_id = C.xml_collection_id ";
sql += "LEFT JOIN sys.schemas S3 ON S3.schema_id = XSC.schema_id ";
sql += "LEFT JOIN sys.schemas S4 ON S4.schema_id = TY.schema_id ";
sql += "LEFT JOIN sys.computed_columns CC ON CC.column_id = C.column_Id AND C.object_id = CC.object_id ";
sql += "LEFT JOIN sys.sql_dependencies DEP ON DEP.referenced_major_id = C.object_id AND DEP.referenced_minor_id = C.column_Id AND DEP.object_id = C.object_id ";
sql += "LEFT JOIN sys.index_columns IC ON IC.object_id = T.object_id AND IC.column_Id = C.column_Id ";
sql += "LEFT JOIN sys.data_spaces AS lob ON lob.data_space_id = TTT.lob_data_space_id ";
sql += "LEFT JOIN sys.data_spaces AS filestr ON filestr.data_space_id = TTT.filestream_data_space_id ";
sql += "LEFT JOIN sys.default_constraints DC ON DC.parent_object_id = T.object_id AND parent_column_id = C.Column_Id ";
sql += "LEFT JOIN sys.change_tracking_tables CTT ON CTT.object_id = T.object_id ";
sql += "WHERE T.type IN ('U','TT') ";
sql += "ORDER BY ISNULL(TT.Name,T.Name),T.object_id,C.column_id";
return sql;
}
private static string GetTableDetail2005()
{
string sql = "";
sql += "SELECT DISTINCT T.type AS ObjectType, C.Name, S4.Name as OwnerType,";
sql += "C.user_type_id, C.Column_Id AS ID, C.max_length AS Size, C.Precision, C.Scale, ISNULL(C.Collation_Name,'') as Collation, C.Is_nullable AS IsNullable, C.Is_RowGuidcol AS IsRowGuid, C.Is_Computed AS IsComputed, C.Is_Identity AS IsIdentity, COLUMNPROPERTY(T.object_id,C.name,'IsIdNotForRepl') AS IsIdentityRepl,IDENT_SEED('[' + S1.name + '].[' + T.Name + ']') AS IdentSeed, IDENT_INCR('[' + S1.name + '].[' + T.Name + ']') AS IdentIncrement, ISNULL(CC.Definition,'') AS Formula, ISNULL(CC.Is_Persisted,0) AS FormulaPersisted, CASE WHEN ISNULL(DEP.column_id,0) = 0 THEN 0 ELSE 1 END AS HasComputedFormula, CASE WHEN ISNULL(IC.column_id,0) = 0 THEN 0 ELSE 1 END AS HasIndex, TY.Name AS Type, '[' + S3.Name + '].' + XSC.Name AS XMLSchema, C.Is_xml_document, TY.is_user_defined, ";
sql += "T.Name AS TableName, T.object_id AS TableId,S1.name AS TableOwner,Text_In_Row_limit, large_value_types_out_of_row,ISNULL(objectproperty(T.object_id, N'TableHasVarDecimalStorageFormat'),0) AS HasVarDecimal,OBJECTPROPERTY(T.OBJECT_ID,'TableHasClustIndex') AS HasClusteredIndex,DSIDX.Name AS FileGroup,ISNULL(LOB.Name,'') AS FileGroupText, ";
sql += "ISNULL(DC.object_id,0) AS DefaultId, DC.name AS DefaultName, DC.definition AS DefaultDefinition, C.rule_object_id, C.default_object_id ";
sql += "FROM sys.columns C ";
sql += "INNER JOIN sys.tables T ON T.object_id = C.object_id ";
sql += "INNER JOIN sys.types TY ON TY.user_type_id = C.user_type_id ";
sql += "INNER JOIN sys.schemas S1 ON S1.schema_id = T.schema_id ";
sql += "INNER JOIN sys.indexes IDX ON IDX.object_id = T.object_id and IDX.index_id < 2 ";
sql += "INNER JOIN sys.data_spaces AS DSIDX ON DSIDX.data_space_id = IDX.data_space_id ";
sql += "LEFT JOIN sys.xml_schema_collections XSC ON XSC.xml_collection_id = C.xml_collection_id ";
sql += "LEFT JOIN sys.schemas S3 ON S3.schema_id = XSC.schema_id ";
sql += "LEFT JOIN sys.schemas S4 ON S4.schema_id = TY.schema_id ";
sql += "LEFT JOIN sys.computed_columns CC ON CC.column_id = C.column_Id AND C.object_id = CC.object_id ";
sql += "LEFT JOIN sys.sql_dependencies DEP ON DEP.referenced_major_id = C.object_id AND DEP.referenced_minor_id = C.column_Id AND DEP.object_id = C.object_id ";
sql += "LEFT JOIN sys.index_columns IC ON IC.object_id = T.object_id AND IC.column_Id = C.column_Id ";
sql += "LEFT JOIN sys.data_spaces AS LOB ON LOB.data_space_id = T.lob_data_space_id ";
sql += "LEFT JOIN sys.default_constraints DC ON DC.parent_object_id = T.object_id AND parent_column_id = C.Column_Id ";
sql += "ORDER BY T.Name,T.object_id,C.column_id";
return sql;
}
private static string GetTableDetail2000()
{
string sql = "";
sql += "SELECT SO.name, ";
sql += "SO.id as object_id, ";
sql += "SU.name as Owner, ";
sql += "OBJECTPROPERTY(SO.ID,'TableTextInRowLimit') AS Text_In_Row_limit,";
sql += "0 AS HasVarDecimal, ";
sql += "CONVERT(bit,0) AS large_value_types_out_of_row, ";
sql += "F.groupname AS FileGroup, ";
sql += "ISNULL(F2.groupname,'') AS FileGroupText, ";
sql += "OBJECTPROPERTY(SO.ID,'TableHasClustIndex') AS HasClusteredIndex ";
sql += "FROM sysobjects SO ";
sql += "inner join sysindexes I ON I.id = SO.id and I.indid < 2 ";
sql += "inner join sysfilegroups f on f.groupid = i.groupid ";
sql += "left join sysindexes I2 ON I2.id = SO.id and I2.indid = 255 ";
sql += "left join sysfilegroups f2 on f2.groupid = i2.groupid ";
sql += "INNER JOIN sysusers SU ON SU.uid = SO.uid WHERE type = 'U' ORDER BY SO.name";
return sql;
}
#endregion Table Detail
}
}

View File

@@ -0,0 +1,58 @@
using OpenDBDiff.Schema.SQLServer.Generates.Model;
namespace OpenDBDiff.Schema.SQLServer.Generates.Generates.SQLCommands
{
internal static class UserDataTypeCommand
{
public static string Get(DatabaseInfo.SQLServerVersion version, DatabaseInfo.SQLServerEdition edition)
{
switch (version)
{
case DatabaseInfo.SQLServerVersion.SQLServer2000:
return Get2000();
case DatabaseInfo.SQLServerVersion.SQLServer2005:
return Get2005();
default:
return Get2008();
}
}
public static string Get2008()
{
string sql = "SELECT ISNULL(AF.name,'') AS assembly_name, ISNULL(AT.assembly_id,0) AS assembly_id, ISNULL(assembly_class,'') AS assembly_class, T.max_length, S2.name as defaultowner, O2.name as defaultname, S1.name as ruleowner, O.name as rulename, ISNULL(T2.Name,'') AS basetypename, S.Name AS Owner, T.Name, T.is_assembly_type, T.user_type_id AS tid, T.is_nullable, T.precision, T.scale ";
sql += "FROM sys.types T ";
sql += "INNER JOIN sys.schemas S ON S.schema_id = T.schema_id ";
sql += "LEFT JOIN sys.types T2 ON T2.user_type_id = T.system_type_id ";
sql += "LEFT JOIN sys.objects O ON O.type = 'R' and O.object_id = T.rule_object_id ";
sql += "LEFT JOIN sys.schemas S1 ON S1.schema_id = O.schema_id ";
sql += "LEFT JOIN sys.objects O2 ON O2.type = 'D' and O2.object_id = T.default_object_id ";
sql += "LEFT JOIN sys.schemas S2 ON S2.schema_id = O2.schema_id ";
sql += "LEFT JOIN sys.assembly_types AT ON AT.user_type_id = T.user_type_id AND T.is_assembly_type = 1 ";
sql += "LEFT JOIN sys.assemblies AF ON AF.assembly_id = AT.assembly_id ";
sql += "WHERE T.is_user_defined = 1 AND T.is_table_type = 0 ORDER BY T.Name";
return sql;
}
public static string Get2005()
{
string sql = "select ISNULL(AF.name,'') AS assembly_name, ISNULL(AT.assembly_id,0) AS assembly_id, ISNULL(assembly_class,'') AS assembly_class, T.max_length, S2.name as defaultowner, O2.name as defaultname, S1.name as ruleowner, O.name as rulename, ISNULL(T2.Name,'') AS basetypename, S.Name AS Owner, T.Name, T.is_assembly_type, T.user_type_id AS tid, T.is_nullable, T.precision, T.scale from sys.types T ";
sql += "INNER JOIN sys.schemas S ON S.schema_id = T.schema_id ";
sql += "LEFT JOIN sys.types T2 ON T2.user_type_id = T.system_type_id ";
sql += "LEFT JOIN sys.objects O ON O.type = 'R' and O.object_id = T.rule_object_id ";
sql += "LEFT JOIN sys.schemas S1 ON S1.schema_id = O.schema_id ";
sql += "LEFT JOIN sys.objects O2 ON O2.type = 'D' and O2.object_id = T.default_object_id ";
sql += "LEFT JOIN sys.schemas S2 ON S2.schema_id = O2.schema_id ";
sql += "LEFT JOIN sys.assembly_types AT ON AT.user_type_id = T.user_type_id AND T.is_assembly_type = 1 ";
sql += "LEFT JOIN sys.assemblies AF ON AF.assembly_id = AT.assembly_id ";
sql += "WHERE T.is_user_defined = 1 ORDER BY T.Name";
return sql;
}
public static string Get2000()
{
return "";
}
}
}

View File

@@ -0,0 +1,51 @@
using OpenDBDiff.Schema.SQLServer.Generates.Model;
using System.Text;
namespace OpenDBDiff.Schema.SQLServer.Generates.Generates.SQLCommands
{
internal static class UserSQLCommand
{
public static string Get(DatabaseInfo.SQLServerVersion version, DatabaseInfo.SQLServerEdition edition)
{
switch (version)
{
case DatabaseInfo.SQLServerVersion.SQLServer2000:
case DatabaseInfo.SQLServerVersion.SQLServer2005:
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 Get2008()
{
var sql = new StringBuilder();
sql.AppendLine("SELECT is_fixed_role, type, ISNULL(suser_sname(sid),'') AS Login,Name,principal_id, ISNULL(default_schema_name,'') AS default_schema_name ");
sql.AppendLine("FROM sys.database_principals ");
sql.AppendLine("WHERE type IN ('S','U','A','R') ");
sql.AppendLine("ORDER BY Name");
return sql.ToString();
}
private static string GetAzure()
{
var sql = new StringBuilder();
//to get LoginName in Azure (asside for the current login) you would have to link to master and query sys.sysusers or sys.sql_users
//the CASE test below will at least get you the Current login
sql.AppendLine("SELECT is_fixed_role, type, CASE WHEN suser_sid()=sid THEN suser_sname() ELSE '' END AS Login,Name,principal_id, ISNULL(default_schema_name,'') AS default_schema_name ");
sql.AppendLine("FROM sys.database_principals ");
sql.AppendLine("WHERE type IN ('S','U','A','R') ");
sql.AppendLine("ORDER BY Name");
return sql.ToString();
}
}
}

View File

@@ -0,0 +1,68 @@
using OpenDBDiff.Schema.SQLServer.Generates.Model;
using System.Text;
namespace OpenDBDiff.Schema.SQLServer.Generates.Generates.SQLCommands
{
internal static class ViewSQLCommand
{
#region View
public static string GetView(DatabaseInfo.SQLServerVersion version, DatabaseInfo.SQLServerEdition edition)
{
switch (version)
{
case DatabaseInfo.SQLServerVersion.SQLServer2000:
case DatabaseInfo.SQLServerVersion.SQLServer2005:
case DatabaseInfo.SQLServerVersion.SQLServer2008:
case DatabaseInfo.SQLServerVersion.SQLServer2008R2:
return GetViewSql2008();
case DatabaseInfo.SQLServerVersion.SQLServerAzure10:
return GetViewSqlAzure();
default:
if (edition == DatabaseInfo.SQLServerEdition.Azure)
return GetViewSqlAzure();
else
return GetViewSql2008();
}
}
private static string GetViewSql2008()
{
string sql = "";
sql += "select distinct ISNULL('[' + S3.Name + '].[' + object_name(D2.object_id) + ']','') AS DependOut, '[' + S2.Name + '].[' + object_name(D.referenced_major_id) + ']' AS TableName, D.referenced_major_id, OBJECTPROPERTY (P.object_id,'IsSchemaBound') AS IsSchemaBound, P.object_id, S.name as owner, P.name as name from sys.views P ";
sql += "INNER JOIN sys.schemas S ON S.schema_id = P.schema_id ";
sql += "LEFT JOIN sys.sql_dependencies D ON P.object_id = D.object_id ";
sql += "LEFT JOIN sys.objects O ON O.object_id = D.referenced_major_id ";
sql += "LEFT JOIN sys.schemas S2 ON S2.schema_id = O.schema_id ";
sql += "LEFT JOIN sys.sql_dependencies D2 ON P.object_id = D2.referenced_major_id ";
sql += "LEFT JOIN sys.objects O2 ON O2.object_id = D2.object_id ";
sql += "LEFT JOIN sys.schemas S3 ON S3.schema_id = O2.schema_id ";
sql += "ORDER BY P.object_id";
return sql;
}
private static string GetViewSqlAzure()
{
var sql = new StringBuilder();
//Avoid using sql_dependencies. Use sys.sql_expression_dependencies instead. http://msdn.microsoft.com/en-us/library/ms174402.aspx
sql.Append("SELECT DISTINCT ISNULL('[' + S3.Name + '].[' + object_name(D2.referencing_id) + ']','') AS DependOut, ");
sql.Append("'[' + S2.Name + '].[' + object_name(D.referenced_id) + ']' AS TableName, ");
sql.Append("D.referenced_id AS referenced_major_id, OBJECTPROPERTY (P.object_id,'IsSchemaBound') AS IsSchemaBound, ");
sql.Append("P.object_id, S.name as owner, P.name as name ");
sql.Append("FROM sys.views P ");
sql.Append("INNER JOIN sys.schemas S ON S.schema_id = P.schema_id ");
sql.Append("LEFT JOIN sys.sql_expression_dependencies D ON P.object_id = D.referencing_id ");
sql.Append("LEFT JOIN sys.objects O ON O.object_id = D.referenced_id ");
sql.Append("LEFT JOIN sys.schemas S2 ON S2.schema_id = O.schema_id ");
sql.Append("LEFT JOIN sys.sql_expression_dependencies D2 ON P.object_id = D2.referenced_id ");
sql.Append("LEFT JOIN sys.objects O2 ON O2.object_id = D2.referencing_id ");
sql.Append("LEFT JOIN sys.schemas S3 ON S3.schema_id = O2.schema_id ");
sql.Append("ORDER BY P.object_id ");
return sql.ToString();
}
#endregion View
}
}