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.

52 lines
2.2 KiB

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();
}
}
}