У меня есть этот код на C #, но мне нужно, чтобы он отобразил все столбцы EXCEPT в первом столбце таблицы (столбец идентификаторов), так что, когда я вставляю данные в идентичную таблицу в другой базе данных, база данных назначения назначает свои собственные значения столбца идентификатора:
SqlCommand commandSourceData = new SqlCommand($"SELECT * FROM dbo.{tableName};", sourceConnection);
SqlDataReader reader = commandSourceData.ExecuteReader();
Есть ли способ сделать это?
Если вы хотите получить общее решение для каждого столбца в своей базе данных, вы можете использовать этот вид кода
public string GetColumnsWithoutIdentity(string tableName, SqlConnection con)
{
SqlDataAdapter da = new SqlDataAdapter($"SELECT * FROM dbo.{tableName} where 1=0", con);
DataTable dt = new DataTable();
da.FillSchema(dt, SchemaType.Source);
var cols = dt.Columns.Cast<DataColumn>().Where(x => !x.AutoIncrement).Select(x => x.ColumnName);
return string.Join(",", cols);
}
Теперь вы можете использовать возвращаемую строку для построения инструкции Sql без столбца автоинкремента.
Обратите внимание, что этот код уязвим для Sql Injection. Вы должны быть абсолютно уверены, что параметр tableName, используемый для построения первого запроса, не вводится непосредственно вашим пользователем. Позвольте ему выбрать из белого списка (только для чтения) предопределенных таблиц (а также это не на 100% безопасно)
Другим недостатком является тот факт, что вам нужно дважды нажать базу данных. Однажды, чтобы получить схему с информацией об столбце AutoIncrement и один, чтобы заполнить данные после этого.