PDA

View Full Version : Stored Procedure



leila_eb
سه شنبه 07 مرداد 1393, 03:45 صبح
ببخشید سوالمو در این قسمت گذاشتم..


SPکه تعریف کردم اجرا نمیشه... کد رو براتون گذاشتم...
ALTER PROCEDURE [dbo].[SpEditSickS]
-- Add the parameters for the stored procedure here

@NationalCode char(10),
@FirstName nvarchar(50),
@LastName nvarchar(50),
@FatherName nvarchar(50),
@Gender nvarchar(10),
@BirthYear numeric(5,0),
@BirthMonth smallint,
@BirthDay smallint,
@Type nvarchar(100),
@ContactAddress nvarchar(300),
@MedicalHistory nvarchar(max),
@TypeOfInsurance nvarchar(50)

AS
BEGIN
DECLARE @NC CHAR(10)
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
BEGIN TRANSACTION
UPDATE People
SET FirstName=@FirstName ,LastName=@LastName,FatherName=@FatherName,Gender= @Gender,@BirthYear=@BirthYear,BirthMonth=@BirthMon th,BirthDay=@BirthDay
WHERE NationalCode=@NC
UPDATE Contacts
SET Type=@Type,ContactAddress=@ContactAddress
WHERE NationalCode=@NC
UPDATE sicks
SET MedicalHistory=@MedicalHistory,TypeOfInsurance=@Ty pe
WHERE NationalCode=@NC
COMMIT
END






و در query اینو میزنم ولی هیچ اتفاقی نمیافته...


EXEC SpEditSickS
@NationalCode=1234567890,
@FirstName=N'زهرا',
@LastName=N'نعمتی',
@FatherName=N'احمد',
@Gender=N'زن',
@BirthYear=1393,
@BirthMonth=4,
@BirthDay=5,
@Type=N'آدرس',
@ContactAddress=N'تهران',
@MedicalHistory=N'گوارشی',
@TypeOfInsurance=N'فرهنگیان'



مشکل از کجاست؟؟

ممنون

mo.jalilian
سه شنبه 07 مرداد 1393, 21:08 عصر
چه خطایی میده؟
print گذاشتید ببینید خط ها اجرا میشن یا نه؟

leila_eb
سه شنبه 07 مرداد 1393, 21:36 عصر
مشکل تو این قسمت حل شد ..
الان مشکل اینجاست که برای وقت دادن به بیمار یه SP نوشتم ولی به خاطر Time که نوعش رو )( Time(7 تعریف کردم ازم Error میگیره .... ولی وقتی Time رو نوعش رو int می کنم درست ج میده ....
؟؟؟؟
راهنمایی کنید..ممنون

mo.jalilian
سه شنبه 07 مرداد 1393, 21:49 عصر
error چی هستش؟

leila_eb
سه شنبه 07 مرداد 1393, 22:03 عصر
Operand type clash: int is incompatible with time

mo.jalilian
سه شنبه 07 مرداد 1393, 22:08 عصر
مقداری که توی این پارامتر دارید پاس میدید به چه صورتی هستش؟
اینطوره هست 13930506 ؟!

leila_eb
سه شنبه 07 مرداد 1393, 22:13 عصر
bale vali qabol nemikone

mo.jalilian
سه شنبه 07 مرداد 1393, 22:26 عصر
خب معلومه این مقدار تبدیل به Date نمیشه، یا از توی اپلیکیشن باید این رو تبیدیل به فرمت تاریخ کنید یا ورودی دیتابیس int باشه و خط بعدیش به date تبدیل کنید و بعد استفاده کنید
باید 13930506بشه 1393/05/06

leila_eb
سه شنبه 07 مرداد 1393, 22:34 عصر
خب این تایم هستش یعنی ورودی رو به صورت 1007040 و بعد به ساعت تبدیل کنم ؟
10:07:04

؟؟
چجوری ورودی رو تبدیل به تایم کنم؟؟

mo.jalilian
سه شنبه 07 مرداد 1393, 22:45 عصر
باید اول طول رو ثابت کنید، مثلا اگر 07 را به صورت 7 می نویسد، تبدیل به 07 کنید
بعدش بر اساس این طول ثابت، رشته را دوتا دوتا بشکنید و : را بین آنها بگذارید

اما بهترین راه حل این هستش که مقدار ورودی که کاربر وارد میکند به همین صورت باشد، یا مثلا از فرمتی شبیه datetime.now استفاده شود

leila_eb
سه شنبه 07 مرداد 1393, 22:52 عصر
وقتی Defualt value روتابع getdate() میزارم باز هم نمیشه..

@SickNationalCode char(10),
@ClerkNationalCode char(10),
@DoctorNationalCode char(10),
@ClinicId char(10),
@AddDate date,

@AddTime time(7)

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO InsertNewSick VALUES( @SickNationalCode,@ClerkNationalCode,@DoctorNation alCode,@ClinicId,@AddDate,@AddTime)
END

...

mo.jalilian
سه شنبه 07 مرداد 1393, 23:00 عصر
دیفالت ولیو برای زمانی هستش که شما برای اون ستون مقداری نفرسید، شما وقتی توی sp دارید مقدار ارسال می کنید، اون رو دیگه در نظر نمی گیره

leila_eb
سه شنبه 07 مرداد 1393, 23:10 عصر
ممنون از راهنماییتون