انتقال دیتا تیبل به دیتابیس
فرض کنیم می خواهییم نتیجه یک سلکت که در یک عنصر دیتا تیبل قرار گرفته و تغییراتی روی اون اعمال شده (رکورد اضافه و یا کم شده و یا مقادیرش بروز شدن) رو به یک جدول دومی Insert کنیم دو تا راه داریم :
یک) یک حلقه ردیف به ردیف را خوانده و در جدول مقصد ثبت کند .
دو) تمام دیتا تیبل را بصورت پارامتری به دیتابیس بفرستیم و عملیات ثبت اونجا اتفاق بیافته .
روش عول که مشخصه و چون از حلقه استفاده شده پس عملیات سنگینی رو خواهد داشت .
ولی روش دوم :
اول یک "نوع" داخل سرور تعریف میکنیم از نوع ساختار جدول ورودی، یعنی اون جدولی که ما داریم بصورت پارامتر میفرستیم دارای چه ساختاری هست
مثال :
کد:
CREATE TYPE [dbo].[MyTableType] AS TABLE(
[Id] int NOT NULL,
[Name] [nvarchar](128) NULL
)
بعد یک استورد پروسیجر می سازیم تا دیتاتیبل ما رو بگیره و مقادیر اونو به جدول مقصد وارد کنه :
کد:
CREATE PROCEDURE [dbo].[InsertTable]
@myTableType MyTableType readonly
AS
BEGIN
insert into [dbo].Records select * from @myTableType
END
نکته : دیتاتیبل ما حتما با زیرمجموعه جدول مقصد باشه یعنی همه فیلد های دیتاتیبل با همون نوع باید در جدول مقصد موجود باشند حالا اگر هم بیشتر بود میتونییم در هنگام سلکت اون مقادیر رو هم اضافه کنیم
مثال :
کد:
insert into [dbo].Records select *,'Ekhtelaf1','Ekhtelaf2' from @myTableType
و یک مثال هم برای نحوه استفاده :
کد:
Dim cn As New SqlConnection()
cn.ConnectionString = "Server=.;Database=test;Trusted_Connection=True;"
cn.Open()
Dim dt As New DataTable()
Dim cm As New SqlCommand("InsertTable", cn)
cm.CommandType = CommandType.StoredProcedure
cm.Parameters.AddWithValue("@myTableType", dt)
cm.ExecuteNonQuery()
نکته : dt همان دیتاتیبلی که تغییرات روی ان اعمال شده و میخواهییم آنرا در دیتابیس ثبت کنیم .
------
دوستان تجربیاتتون میتونه برای ما هم مفید باشه ، دریغ نکنین