У меня проблемы с переносом данных из хранимой процедуры в реальную таблицу с помощью SqlBulkCopy
.
В хранимой процедуре я создаю временную таблицу, а затем вставляю в нее значения из многих таблиц. .
В хранимой процедуре:
-- Ex 1:
CREATE TABLE #result (name varchar(100));
INSERT INTO #result
SELECT name FROM dbo.Student
...
SELECT * FROM #result
-- Ex 2:
DECLARE @result(name varchar(100))
INSERT INTO #result
SELECT name FROM dbo.Student
...
SELECT * FROM @result
-- Ex3: //use store select directly without using temporary table
SELECT name FROM dbo.Student
-- Ex4: //use function, in function I wrote exactly in storeP of Ex1 or Ex2
SELECT name FROM fnc_myfunction
Код:
conn.Open();
Stopwatch watch = Stopwatch.StartNew();
string csvConnString1 = "MySource";
OleDbDataAdapter oleda1 = new OleDbDataAdapter("exec my_storeP")", csvConnString1);
DataTable dt1 = new DataTable();
oleda1.Fill(dt1);
using (SqlBulkCopy copy = new SqlBulkCopy(conn))
{
copy.DestinationTableName = "dbo.Class";
copy.ColumnMappings.Add("name", "StudentName");
copy.WriteToServer(dt1);
}
Console.WriteLine("SqlBulkCopy: {0}", watch.Elapsed);
Однако я не могу закончить, потому что он не может сопоставить любое «имя» в хранилище Ex1 и Ex2 , но он запускается Ex3 и Ex4.
Что мне теперь делать для Ex1 и Ex2?