SetSnapshotIsolation() public static method

public static SetSnapshotIsolation ( string databaseName, bool value ) : SqlPreCommandSimple
databaseName string
value bool
return SqlPreCommandSimple
Beispiel #1
0
        public static SqlPreCommand?SnapshotIsolation()
        {
            if (!Connector.Current.AllowsSetSnapshotIsolation)
            {
                return(null);
            }


            var list = Schema.Current.DatabaseNames().Select(a => a?.ToString()).ToList();

            if (list.Contains(null))
            {
                list.Remove(null);
                list.Add(Connector.Current.DatabaseName());
            }

            var cmd = list.NotNull()
                      .Where(db => !SnapshotIsolationEnabled(db))
                      .Select(db => SqlPreCommand.Combine(Spacing.Simple,
                                                          SqlBuilder.SetSingleUser(db),
                                                          SqlBuilder.SetSnapshotIsolation(db, true),
                                                          SqlBuilder.MakeSnapshotIsolationDefault(db, true),
                                                          SqlBuilder.SetMultiUser(db))
                              ).Combine(Spacing.Double);

            return(cmd);
        }
        public static SqlPreCommand SnapshotIsolation()
        {
            if (!Connector.Current.AllowsSetSnapshotIsolation)
            {
                return(null);
            }

            var list = Schema.Current.DatabaseNames().Select(a => a?.ToString()).ToList();

            if (list.Contains(null))
            {
                list.Remove(null);
                list.Add(Connector.Current.DatabaseName());
            }

            var cmd = list.Select(a =>
                                  SqlPreCommand.Combine(Spacing.Simple,
                                                        //DisconnectUsers(a.name, "SPID" + i) : null,
                                                        SqlBuilder.SetSingleUser(a),
                                                        SqlBuilder.SetSnapshotIsolation(a, true),
                                                        SqlBuilder.MakeSnapshotIsolationDefault(a, true),
                                                        SqlBuilder.SetMultiUser(a))
                                  ).Combine(Spacing.Double);

            return(cmd);
        }
        public static SqlPreCommand SnapshotIsolation(Replacements replacements)
        {
            if (replacements.SchemaOnly)
            {
                return(null);
            }

            var list = Schema.Current.DatabaseNames().Select(a => a?.ToString()).ToList();

            if (list.Contains(null))
            {
                list.Remove(null);
                list.Add(Connector.Current.DatabaseName());
            }

            var results = Database.View <SysDatabases>()
                          .Where(d => list.Contains(d.name))
                          .Select(d => new { d.name, d.snapshot_isolation_state, d.is_read_committed_snapshot_on }).ToList();

            var cmd = replacements.WithReplacedDatabaseName().Using(_ => results.Select((a, i) =>
                                                                                        SqlPreCommand.Combine(Spacing.Simple,
                                                                                                              !a.snapshot_isolation_state || !a.is_read_committed_snapshot_on ? DisconnectUsers(a.name, "SPID" + i) : null,
                                                                                                              !a.snapshot_isolation_state ? SqlBuilder.SetSnapshotIsolation(a.name, true) : null,
                                                                                                              !a.is_read_committed_snapshot_on ? SqlBuilder.MakeSnapshotIsolationDefault(a.name, true) : null)).Combine(Spacing.Double));

            if (cmd == null)
            {
                return(null);
            }

            return(SqlPreCommand.Combine(Spacing.Double,
                                         new SqlPreCommandSimple("use master -- Start Snapshot"),
                                         cmd,
                                         new SqlPreCommandSimple("use {0} -- Stop Snapshot".FormatWith(Connector.Current.DatabaseName()))));
        }