Исходный компонент пытается определить, какие столбцы и типы будут возвращены. Поскольку вы используете динамический SQL, метаданные могут меняться при каждом запуске.
С наборами результатов можно определить возвращаемые данные, но их следует использовать только в том случае, если у вас есть гарантированные результаты при каждом выполнении.
EDIT: Я создаю соединение и запускаю команду так, чтобы она заполняла таблицу данных. Затем я помещаю заголовки столбцов в строковый массив. Есть много примеров.
Затем я использую следующую функцию для создания таблицы назначения. Наконец, я создаю datareader и передаю это .Net SqlBulkCopy. Надеюсь это поможет.
private void CreateTable(string TableName, string[] Fields)
{
if (TableExists(TableName) && Overwrite)
{
SqlCommand = new SqlCommand($"Drop Table [{TableName}]", SqlConnection);
SqlCommand.ExecuteNonQuery();
}
string Sql = $"Create Table [{TableName}] (";
int ColumnNumber = 1;
foreach (string Field in Fields)
{
string FieldValue = Field;
if (! HasHeaders)
{
FieldValue = "Column" + ColumnNumber;
ColumnNumber++;
}
Sql += $"[{FieldValue}] Varchar(8000),";
}
Sql = Sql + "ImportFileID Int, ID Int Identity(1,1) Not Null, Constraint [PK_" + TableName + "] Primary Key Clustered ([ID] Asc))";
SqlCommand = new SqlCommand(Sql, SqlConnection);
SqlCommand.ExecuteNonQuery();
}
Я никогда не слышал о возможности вывода курсора. что-то новое в 2016 году, или это просто принятие желаемого за действительное? –
Это требование.Я хочу знать, возможно ли это реализовать) –