private void getNonclusteredIndexes()

in src/PDWScripter/PDWscripter.cs [1067:1155]


        private void getNonclusteredIndexes(Boolean GetStructure, Boolean SourceFromFile)
        {
            nonclusteredIndexes.Clear();
            nonClusteredClause = "";
            StringBuilder nonclusteredspec = new StringBuilder();
            if (!SourceFromFile)
            {
                cmd.CommandText =
                    "select ix.name as index_name, i.key_ordinal, c.name, i.is_descending_key " +
                    "from sys.index_columns i " +
                    "join sys.indexes ix on ix.index_id = i.index_id and ix.object_id = i.object_id " +
                    "join sys.columns c on c.column_id = i.column_id  and c.object_id = ix.object_id " +
                    "where i.key_ordinal > 0 and " +
                    "i.object_id = (select object_id from sys.tables where schema_name(schema_id) + '.' + name = '" + sourceTable + "') and " +
                    "i.index_id > 1 " +   // NonClustered Indexes
                    "order by ix.name, key_ordinal ";

                rdr = cmd.ExecuteReader();

                if (rdr.HasRows)
                {
                    string idxname = "";
                    NonclusteredIndexDef ncidef = null;
                    while (rdr.Read())
                    {
                        if (idxname != rdr.GetString(rdr.GetOrdinal("index_name")))
                        {
                            idxname = rdr.GetString(rdr.GetOrdinal("index_name"));
                            ncidef = new NonclusteredIndexDef(idxname);
                            nonclusteredIndexes.Add(ncidef);

                            if (GetStructure)
                            {
                                dbstruct.GetTable(sourceTable).nonclusteredIndexes.Add(ncidef);
                            }

                        }

                        if (!GetStructure)
                        {
                            ncidef.cols.Add(new IndexColumnDef(
                                rdr.GetByte(rdr.GetOrdinal("key_ordinal")),
                                rdr.GetString(rdr.GetOrdinal("name")),
                                rdr.GetBoolean(rdr.GetOrdinal("is_descending_key")),
                                0
                                ));
                        }
                        else
                        {
                            dbstruct.GetTable(sourceTable).GetIndex(idxname).cols.Add(new IndexColumnDef(
                                rdr.GetByte(rdr.GetOrdinal("key_ordinal")),
                                rdr.GetString(rdr.GetOrdinal("name")),
                                rdr.GetBoolean(rdr.GetOrdinal("is_descending_key")),
                                0
                                ));
                        }

                    }
                }

                rdr.Close();
                if (GetStructure)
                {
                    return;
                }
            }
            else
            {
                nonclusteredIndexes = dbstruct.GetTable(sourceTable).nonclusteredIndexes;
            }
            foreach (NonclusteredIndexDef ncidef in nonclusteredIndexes)
            {
                nonclusteredspec.Append("CREATE INDEX [" + ncidef.name + "] ON [" + destDb + "].[" + destTable.Replace(".", "].[") + "] ");
                foreach (IndexColumnDef i in ncidef.cols)
                {
                    if (i.key_ordinal > 1)
                    {
                        nonclusteredspec.Append("\r\n,");
                    }
                    else
                    {
                        nonclusteredspec.Append("\r\n(");
                    }
                    nonclusteredspec.Append("[" + i.name + "]" + (i.is_descending_key ? " DESC " : ""));
                }
                nonclusteredspec.Append(");\r\n");
            }
            nonClusteredClause = nonclusteredspec.ToString();
        }