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