示例#1
0
        internal static string CreateDatabaseScript(string databaseName, string dataFileName, string logFileName, SqlVersion sqlVersion)
        {
            var builder = new SqlDdlBuilder();

            builder.AppendSql("create database ");
            builder.AppendIdentifier(databaseName);
            if (null != dataFileName)
            {
                Debug.Assert(logFileName != null, "must specify log file with data file");
                builder.AppendSql(" on primary ");
                builder.AppendFileName(dataFileName);
                builder.AppendSql(" log on ");
                builder.AppendFileName(logFileName);
            }

            // Set READ_COMMITTED_SNAPSHOT ON, if SQL Server 2005 and up and not SQLAzure.
            if (sqlVersion >= SqlVersion.Sql9)
            {
                builder.AppendNewLine();
                builder.AppendSql("if serverproperty('EngineEdition') <> 5 alter database ");
                builder.AppendIdentifier(databaseName);
                builder.AppendSql(" set read_committed_snapshot on");
            }

            return(builder.unencodedStringBuilder.ToString());
        }
示例#2
0
        private static string SetReadCommittedSnapshotScript(string databaseName)
        {
            SqlDdlBuilder sqlDdlBuilder = new SqlDdlBuilder();

            sqlDdlBuilder.AppendSql("alter database ");
            sqlDdlBuilder.AppendIdentifier(databaseName);
            sqlDdlBuilder.AppendSql(" set read_committed_snapshot on");
            return(sqlDdlBuilder.unencodedStringBuilder.ToString());
        }
示例#3
0
        internal static string CreateDatabaseExistsScript(string databaseName, bool useDeprecatedSystemTable)
        {
            var builder = new SqlDdlBuilder();

            builder.AppendSql("SELECT Count(*) FROM ");
            AppendSysDatabases(builder, useDeprecatedSystemTable);
            builder.AppendSql(" WHERE [name]=");
            builder.AppendStringLiteral(databaseName);
            return(builder.unencodedStringBuilder.ToString());
        }
示例#4
0
        internal static string CreateDatabaseExistsScript(string databaseName)
        {
            SqlDdlBuilder sqlDdlBuilder = new SqlDdlBuilder();

            sqlDdlBuilder.AppendSql("IF db_id(");
            sqlDdlBuilder.AppendStringLiteral(databaseName);
            sqlDdlBuilder.AppendSql(") IS NOT NULL SELECT 1 ELSE SELECT Count(*) FROM sys.databases WHERE [name]=");
            sqlDdlBuilder.AppendStringLiteral(databaseName);
            return(sqlDdlBuilder.unencodedStringBuilder.ToString());
        }
示例#5
0
 private static void AppendSysDatabases(SqlDdlBuilder builder, bool useDeprecatedSystemTable)
 {
     if (useDeprecatedSystemTable)
     {
         builder.AppendSql("sysdatabases");
     }
     else
     {
         builder.AppendSql("sys.databases");
     }
 }
示例#6
0
        internal static string CreateDatabaseScript(string databaseName, string dataFileName, string logFileName)
        {
            var builder = new SqlDdlBuilder();

            builder.AppendSql("create database ");
            builder.AppendIdentifier(databaseName);
            if (null != dataFileName)
            {
                Debug.Assert(logFileName != null, "must specify log file with data file");
                builder.AppendSql(" on primary ");
                builder.AppendFileName(dataFileName);
                builder.AppendSql(" log on ");
                builder.AppendFileName(logFileName);
            }

            return(builder.unencodedStringBuilder.ToString());
        }
示例#7
0
        internal static string DropDatabaseScript(string databaseName)
        {
            SqlDdlBuilder sqlDdlBuilder = new SqlDdlBuilder();

            sqlDdlBuilder.AppendSql("drop database ");
            sqlDdlBuilder.AppendIdentifier(databaseName);
            return(sqlDdlBuilder.unencodedStringBuilder.ToString());
        }
示例#8
0
        internal static string CreateCountDatabasesBasedOnFileNameScript(string databaseFileName, bool useDeprecatedSystemTable)
        {
            var builder = new SqlDdlBuilder();

            builder.AppendSql("SELECT Count(*) FROM ");

            if (useDeprecatedSystemTable)
            {
                builder.AppendSql("sysdatabases");
            }
            if (!useDeprecatedSystemTable)
            {
                builder.AppendSql("sys.master_files");
            }
            builder.AppendSql(" WHERE [");
            if (useDeprecatedSystemTable)
            {
                builder.AppendSql("filename");
            }
            else
            {
                builder.AppendSql("physical_name");
            }
            builder.AppendSql("]=");
            builder.AppendStringLiteral(databaseFileName);
            return(builder.unencodedStringBuilder.ToString());
        }
示例#9
0
        internal static string CreateGetDatabaseNamesBasedOnFileNameScript(
            string databaseFileName,
            bool useDeprecatedSystemTable)
        {
            SqlDdlBuilder builder = new SqlDdlBuilder();

            builder.AppendSql("SELECT [d].[name] FROM ");
            SqlDdlBuilder.AppendSysDatabases(builder, useDeprecatedSystemTable);
            builder.AppendSql(" AS [d] ");
            if (!useDeprecatedSystemTable)
            {
                builder.AppendSql("INNER JOIN sys.master_files AS [f] ON [f].[database_id] = [d].[database_id]");
            }
            builder.AppendSql(" WHERE [");
            if (useDeprecatedSystemTable)
            {
                builder.AppendSql("filename");
            }
            else
            {
                builder.AppendSql("f].[physical_name");
            }
            builder.AppendSql("]=");
            builder.AppendStringLiteral(databaseFileName);
            return(builder.unencodedStringBuilder.ToString());
        }
示例#10
0
        internal static string CreateDatabaseScript(
            string databaseName,
            string dataFileName,
            string logFileName)
        {
            SqlDdlBuilder sqlDdlBuilder = new SqlDdlBuilder();

            sqlDdlBuilder.AppendSql("create database ");
            sqlDdlBuilder.AppendIdentifier(databaseName);
            if (dataFileName != null)
            {
                sqlDdlBuilder.AppendSql(" on primary ");
                sqlDdlBuilder.AppendFileName(dataFileName);
                sqlDdlBuilder.AppendSql(" log on ");
                sqlDdlBuilder.AppendFileName(logFileName);
            }
            return(sqlDdlBuilder.unencodedStringBuilder.ToString());
        }
示例#11
0
        internal static string CreateDatabaseExistsScript(string databaseName)
        {
            // This handles non-SQL Azure servers by using db_id() which will return a non null value for
            // a database on the server even if the login doesn't have "view any database" permission.
            // On SQL Azure db_id() only works for the current database, which means it will never work here
            // because the current database is master. In this case we fall back to the query from sys.databases.
            // This doesn't work for non-SQL Azure if the login does not have 'view any database'
            // permission, but that case was covered by db_id(). On SQL Azure there are no server class
            // securables, which means it is not possible to deny the login 'view any database' so in theory
            // if the user can connect to master then the sys.databases query will work.

            var builder = new SqlDdlBuilder();

            builder.AppendSql("IF db_id(");
            builder.AppendStringLiteral(databaseName);
            builder.AppendSql(") IS NOT NULL SELECT 1 ELSE SELECT Count(*) FROM sys.databases WHERE [name]=");
            builder.AppendStringLiteral(databaseName);
            return(builder.unencodedStringBuilder.ToString());
        }
示例#12
0
        internal static string SetDatabaseOptionsScript(SqlVersion sqlVersion, string databaseName)
        {
            if (sqlVersion < SqlVersion.Sql9)
            {
                return(string.Empty);
            }
            SqlDdlBuilder sqlDdlBuilder = new SqlDdlBuilder();

            sqlDdlBuilder.AppendSql("if serverproperty('EngineEdition') <> 5 execute sp_executesql ");
            sqlDdlBuilder.AppendStringLiteral(SqlDdlBuilder.SetReadCommittedSnapshotScript(databaseName));
            return(sqlDdlBuilder.unencodedStringBuilder.ToString());
        }
示例#13
0
        private void AppendCreateSchema(string schema)
        {
            this.AppendSql("if (schema_id(");
            this.AppendStringLiteral(schema);
            this.AppendSql(") is null) exec(");
            SqlDdlBuilder sqlDdlBuilder = new SqlDdlBuilder();

            sqlDdlBuilder.AppendSql("create schema ");
            sqlDdlBuilder.AppendIdentifier(schema);
            this.AppendStringLiteral(sqlDdlBuilder.unencodedStringBuilder.ToString());
            this.AppendSql(");");
            this.AppendNewLine();
        }
示例#14
0
        internal static string SetDatabaseOptionsScript(SqlVersion sqlVersion, string databaseName)
        {
            if (sqlVersion < SqlVersion.Sql9)
            {
                return(String.Empty);
            }

            var builder = new SqlDdlBuilder();

            // Set READ_COMMITTED_SNAPSHOT ON, if SQL Server 2005 and up, and not SQLAzure.
            builder.AppendSql("if serverproperty('EngineEdition') <> 5 execute sp_executesql ");
            builder.AppendStringLiteral(SetReadCommittedSnapshotScript(databaseName));

            return(builder.unencodedStringBuilder.ToString());
        }
示例#15
0
        private void AppendCreateSchema(string schema)
        {
            AppendSql("if (schema_id(");
            AppendStringLiteral(schema);
            AppendSql(") is null) exec(");

            // need to create a sub-command and escape it as a string literal as well...
            var schemaBuilder = new SqlDdlBuilder();

            schemaBuilder.AppendSql("create schema ");
            schemaBuilder.AppendIdentifier(schema);

            AppendStringLiteral(schemaBuilder.unencodedStringBuilder.ToString());
            AppendSql(");");
            AppendNewLine();
        }