PDA

View Full Version : درج همزمان تعداد زیادی داده در چند جدول



mahtab kf
یک شنبه 11 اسفند 1392, 11:28 صبح
با سلام
من تعداد زیادی داده دارم که می خوام با فشردن یک کلید INSERT همه رو همزمان در با نکم و در چند جدول ذخیره کنم برای این کار یک SP نوشتم که خطایی نداره اما درج هم انجام نمیشه خواستم از دوستان بخواهم که یه نگاهی بهش بندازن ببینن آیا مشکل از SP هست یا نه
ممنون
این هم کدم:


ALTER PROCEDURE [dbo].[InsertPiece]
(
@brandItem nvarchar(50),
@NameItem nvarchar(50),
@modelItem nvarchar(50),
@priceItem money,
@saleItem money,
@img1 nvarchar(MAX),
@img2 nvarchar(MAX),
@img3 nvarchar(MAX),
@img4 nvarchar(MAX),
@Girth nvarchar(50),
@WeightTablet nvarchar(50),
@Cpu nvarchar(MAX),
@Gpu nvarchar(MAX),
@Ram nvarchar(MAX),
@HDD nvarchar(MAX),
@OperatingSystem nvarchar(MAX),
@Warranty nvarchar(50),
@Wifi nvarchar(50),
@Sam nvarchar(50),
@Parle nvarchar(50),
@Gps nvarchar(50),
@Gprs nvarchar(50),
@Bluetooth nvarchar(50),
@Camera nvarchar(50),
@Webcams nvarchar(50),
@imgBag nvarchar(50),
@colorBag nvarchar(50),
@smartBag bit,
@PriceBag money,
@saleBag money,
@imgLcdProtected nvarchar(50),
@AntiknockLcd bit,
@PriceLcdProtected money,
@SaleLcdProtected money,
@nameCharger nvarchar(50)
)
AS
declare @auto bigint
BEGIN
insert into TBaddItem(brandItem,NameItem,modelItem,priceItem,s aleItem,img1,img2,img3,img4)values(@brandItem,@Nam eItem,@modelItem,@priceItem,@saleItem,@img1,@img2, @img3,@img4)
select @auto = @@Identity from TBaddItem
insert into TBconfig(Girth,weightTablet,Cpu,Gpu,Ram,HDD,OS,War ranty,Wifi,Sam,Parle,Gps,Gprs,Bluetooth,Camera,Web cams,id)values(@Girth,@WeightTablet,@Cpu,@Gpu,@Ram ,@HDD,@OperatingSystem,@Warranty,@Wifi,@Sam,@Parle ,@Gps,@Gprs,@Bluetooth,@Camera,@Webcams,@auto)
insert into TBSidePiece(imgBag,colorBag,smartBag,PriceBag,sale Bag,imgLcdProtected,AntiknockLcd,PriceLcdProtected ,saleLcdProtected,NameCharger,id)
values(@imgBag,@colorBag,@smartBag,@PriceBag,@sale Bag,@imgLcdProtected,@AntiknockLcd,@PriceLcdProtec ted,@SaleLcdProtected,@nameCharger,@auto)
END

mahtab kf
دوشنبه 12 اسفند 1392, 11:44 صبح
دوستان کسی نظری نداره؟

espootin
دوشنبه 12 اسفند 1392, 13:44 عصر
با سلام.

ظاهرا که مشکل خاصی نداره!
در صورت درج نکردن، حتما باید یک خطایی داشته باشه! اجرای پروسیجر چه خروجی به شما می دهد؟ خروجی رو بگذارید لطفا.

mahtab kf
سه شنبه 13 اسفند 1392, 14:55 عصر
با سلام.

ظاهرا که مشکل خاصی نداره!
در صورت درج نکردن، حتما باید یک خطایی داشته باشه! اجرای پروسیجر چه خروجی به شما می دهد؟ خروجی رو بگذارید لطفا.
وقتی execute میکنم پیغام Command(s) completed successfully. رو میده و وقتی debug میکنم پیغام زیرو میده:

Auto-attach to process '[2532] [SQL] ROSHANAEI' on machine 'ROSHANAEI' succeeded.The thread 'ROSHANAEI [56]' (0xea8) has exited with code 0 (0x0).
The thread 'ROSHANAEI [56]' (0xea8) has exited with code 0 (0x0).
The thread 'ROSHANAEI [56]' (0xea8) has exited with code 0 (0x0).
The thread 'ROSHANAEI [56]' (0xea8) has exited with code 0 (0x0).
The thread 'ROSHANAEI [56]' (0xea8) has exited with code 0 (0x0).
The program '[2532] [SQL] ROSHANAEI: ROSHANAEI' has exited with code 0 (0x0).

mahtab kf
سه شنبه 13 اسفند 1392, 15:01 عصر
من این sp رو تو تابع زیر اجرا میکنم مشکل اینجاست که تابع همش مقدار 1- رو برمیگردونه و چیزی در جدول درج نمیشه:


public static bool ADDPieces1(string brand, string name, string model,string price,string sale,
string Img1,string Img2,string Img3,string Img4,
string Girth,string WeightTablet,string Cpu,string Gpu,string Ram,string HDD,string OS,string Warranty,
string Wifi,string Sam,string Parle,string Gps,string Gprs,string Bluetooth,string Camera,string Webcams,
string imgBag, string colorBag, string smartBag,string PriceBag, string SaleBag, string imgLcdProtected,string AntiknockLcd,
string PriceLcdProtected, string SaleLcdProtected, string NameCharger)
{
DbCommand comm = GenericDataAccess.CreateCommand();
comm.CommandText = "InsertPiece";
DbParameter param = comm.CreateParameter();


param.ParameterName = "@brand";
param.Value = brand;
param.DbType = DbType.String;
comm.Parameters.Add(param);


param = comm.CreateParameter();
param.ParameterName = "@name";
param.Value = name;
param.DbType = DbType.String;
comm.Parameters.Add(param);


param = comm.CreateParameter();
param.ParameterName = "@model";
param.Value = model;
param.DbType = DbType.String;
comm.Parameters.Add(param);

.
.
بقیه پارامترها
.
param = comm.CreateParameter();
param.ParameterName = "@NameCharger";
param.Value = NameCharger;
param.DbType = DbType.String;
comm.Parameters.Add(param);


int result = -1;
try
{
result = GenericDataAccess.ExecuteNonQuery(comm);
}
catch { }
return(result >= 1);
}

espootin
سه شنبه 13 اسفند 1392, 19:11 عصر
فقط در صورتی که از Transaction استفاده کنید و عمل Rollback انجام شود، ممکن است بدون اینکه خطایی رخ دهد داده ای ذخیره نشود! منطقی نیست ،‌باید حتما اتفاقی بیفتد !

با این کد هایی که گذاشتین باز هم نکته خاصی به چشم نیومد! توصیه می کنم برای پیدا کردن مشکل مرحله به مرحله اجرا کنید . در واقع حتما از توی خود
SQL Server یکبار به sp پارامتر بدهید و اجرا کنید و نتیجه را بررسی کنید.

* بررسی کنید تریگری نباشد که مانع از انجام درج شود.

mahtab kf
چهارشنبه 14 اسفند 1392, 10:52 صبح
* بررسی کنید تریگری نباشد که مانع از انجام درج شود.
میشه در این باره کمی توضیح بدید؟ ممنون

espootin
چهارشنبه 14 اسفند 1392, 11:06 صبح
با سلام

تریگر نوعی خاصی از Stored Procedure هست که به صورت اتوماتیک در هنگام رخ دادن رویداد بروی دیتابیس یا سرور فعال می شود. فعال شدن می تواند در هنگام اجرای دستورات DDL یا DML باشد.

با این تعاریف، پس می توان تریگری تعریف کرد که مانع از عمل درج یا حذف یا ویرایش شود. بدین صورت که هر گاه این دستورات اجرا شد ،‌ عمل Rollback انجام شود . زمانی که Rollback زده می شود به حالت قبل باز می گردد و دیتابیس هیچ تغییری نمی کند.

mahtab kf
پنج شنبه 15 اسفند 1392, 10:04 صبح
با سلام

تریگر نوعی خاصی از Stored Procedure هست که به صورت اتوماتیک در هنگام رخ دادن رویداد بروی دیتابیس یا سرور فعال می شود. فعال شدن می تواند در هنگام اجرای دستورات DDL یا DML باشد.

با این تعاریف، پس می توان تریگری تعریف کرد که مانع از عمل درج یا حذف یا ویرایش شود. بدین صورت که هر گاه این دستورات اجرا شد ،‌ عمل Rollback انجام شود . زمانی که Rollback زده می شود به حالت قبل باز می گردد و دیتابیس هیچ تغییری نمی کند.
ممنون از وقتی که میذارید و جواب میدید اما منظور من این بود که چطور بفهمم این تریگر وجود دارد یا نه؟ چون من همچین چیزی تعریف نکردم آیا باز هم امکان وجودش هست؟

espootin
پنج شنبه 15 اسفند 1392, 14:53 عصر
خوب این احتمال هست. شما باید تمام موارد دیگر را نیز بررسی کنید.

از این مسیر می توانید تریگر ها را ببینید:
DBName] -> Programmability-> Database Triggers]