PDA

View Full Version : مبتدی: پاس دادن پارامتر sp به تریگر



ozzy_mra
شنبه 10 مهر 1389, 12:24 عصر
سلام
من تو بخش sql server سوال زیر رو پرسیدم
http://barnamenevis.org/forum/showthread.php?t=250682
تو برنامم برای اینزرت از یه sp استفاده کردم به شکل زیر

public void InsertNewKole(int oscode,string kCode, string kTitle, string kIjadDate, int kUserCreator, int kMahiat, int kVaziat)
{
try
{
SqlConnection objConnection = new SqlConnection();
objConnection.ConnectionString = ConfigurationManager.ConnectionStrings["shahed.Properties.Settings.Account_Str"].ConnectionString;
objConnection.Open();
SqlCommand insertCmd = new SqlCommand();
insertCmd.Connection = objConnection;
insertCmd.CommandText = "usp_InsertKole1";
insertCmd.CommandType = CommandType.StoredProcedure;
insertCmd.Parameters.AddWithValue("@code", oscode);
insertCmd.Parameters.AddWithValue("@kcode",kCode);
insertCmd.Parameters.AddWithValue("@ktitle",kTitle);
insertCmd.Parameters.AddWithValue("@kijaddate",kIjadDate);
insertCmd.Parameters.AddWithValue("@kusercreator",kUserCreator);
insertCmd.Parameters.AddWithValue("@kmahiat",kMahiat);
insertCmd.Parameters.AddWithValue("@kvaziat",kVaziat);
insertCmd.ExecuteNonQuery();
MessageBox.Show("اطلاعات با موفقیت در سرور ذخیره گردید");
objConnection.Close();
}
catch (Exception ex)
{
MessageBox.Show("خطا در کلاس ایجاد حساب کل جدید" + "\n" + "\n" + ex.ToString());
}
}
بعد برای تیبلی که قراره توش اینزرت بشه یه تریگر به شکل زیر تعریف کردم :

Create trigger utblKolTR on uTblKol
instead of insert

as
declare
@code decimal(18,3),
@kcode varchar(6),
@ktitle nvarchar(50),
@kijaddate varchar(10),
@kusercreator decimal(18,3),
@kmahiat int,
@kvaziat int


declare @code1 decimal(18,3)
select @code1 = max(KolSN) from uTblKol

declare @int int
select @int = FLOOR(@code1)
declare @ashar float
set @ashar= @code1 - @int
declare @newCode decimal(18,3)
set @newCode = @int + 1 + (@code *.001)

--exec usp_InsertKole @newCode,@kcode,@ktitle,@kijaddate,@kusercreator,@ kmahiat,@kvaziat
INSERT INTO uTblKol (KolSN,KolCode,KolTitle,InsertDate,InsertUser,Mahi atID,VaziatID)
VALUES
(@newCode,@kcode,@ktitle,@kijaddate,@kusercreator, @kmahiat,@kvaziat)
همه بدبختی من اینه که باید پارامتر هایی رو که به sp پاس دادم تو تریگرم هم شناخته بشه و بر اساس اونا عملیات لازم رو انجام بده و اطلعات رو به صورتی که من خواستم اینزرت کنه ولی نمی دونم چطور پارامترهام رو به تریگرم بشناسونم
اگه ممکنه راهنماییم کنید متشکرم

ozzy_mra
سه شنبه 13 مهر 1389, 09:55 صبح
به این صورت حل شد :

Create trigger [dbo].[utblKolTR] on [dbo].[uTblKol]
instead of insert

as
declare @kcode varchar(6),
@ktitle nvarchar(50),
@kijaddate varchar(10),
@kusercreator decimal(18,3),
@kmahiat int,
@kvaziat int

declare @oscode decimal(18,3)
select @oscode= KolSN from Inserted
declare @code decimal(18,3)

select @code = max(KolSN) from uTblKol where (KolSN - FLOOR(KolSN) = @oscode)
IF(@code is null)
set @code=0.0

declare @int int
select @int = FLOOR(@code)

declare @newCode decimal(18,3)
set @newCode = @int + 1 + (@oscode)

select @kcode=KolCode from Inserted
select @ktitle=KolCode from Inserted
select @kijaddate=InsertDate from Inserted
select @kusercreator=InsertUser from Inserted
select @kmahiat=MahiatID from Inserted
select @kvaziat=VaziatID from inserted

INSERT INTO uTblKol (KolSN,KolCode,KolTitle,InsertDate,InsertUser,Mahi atID,VaziatID)

VALUES
(@newCode,@kcode,@ktitle,@kijaddate,@kusercreator, @kmahiat,@kvaziat)