PDA

View Full Version : Store procedure



maryam za
یک شنبه 23 شهریور 1393, 09:50 صبح
با سلام
دوستان من می خوام یه SP بنویسم که دو داده از نوع time را با هم مقایسه کند، اما نتونستم :گریه::گریه:
اگه کسی راهنماییم کنه ممنون میشم

mohammad reza beizavi
یک شنبه 23 شهریور 1393, 10:14 صبح
درود
مقایسه کنی یعنی چی؟؟؟ جزییات یا نمونه و یا خطایی که بهتون میده رو بذارید
اگر برای بزرگتر، کوچکتر و مساوی و ... هست که خیلی راحته: نمونه:

select * from Users where startValidTime < endValidTime;
هر دو فیلد از نوع time توی sql server هستند.

maryam za
یک شنبه 23 شهریور 1393, 10:43 صبح
اینم خطایی که میده
Operand data type time is invalid for subtract operator.

mohammad reza beizavi
یک شنبه 23 شهریور 1393, 10:55 صبح
خب کوئری چی شد؟؟؟
به کدوم کوئری این خطا رو میده.
نوع فیلدو یه نمونه از مقادیری که داخلشه چی هستن؟

maryam za
یک شنبه 23 شهریور 1393, 11:29 صبح
فرستادم کد رو نوشت باید تایید شه تا نمایش داده بشه

maryam za
یک شنبه 23 شهریور 1393, 11:30 صبح
USE [Agency]
GO
/****** Object: StoredProcedure [dbo].[Time] Script Date: 08/05/2009 10:03:16 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[Time]

@TimeOfReserve Time ,
@TimeOfFlight Time,
@Time time = '04:00:00'


AS
BEGIN
select * from Flights inner join Reservation on @TimeOfReserve <= @TimeOfFlight - @Time


return 1
END
if (@TimeOfReserve between (@TimeOfFlight - @Time) and @TimeOfReserve)

maryam za
یک شنبه 23 شهریور 1393, 11:31 صبح
یا با select و یا با این if

mohammad reza beizavi
یک شنبه 23 شهریور 1393, 12:29 عصر
دوست گرامی حتما شوخی می کنید!!!!
در stored procedure و Function شما نمی تونید از پارامتر در ساختار دستورات استفاده کنید و مقادیر پاس داده شده می تونند فقط به عنوان مقادیر متناطر فیلدها در نظر گرفته بشند. پس شما باید کوئری را با string بسازید و بعد با exec اجرا کنید.
مانمد این:


ALTER PROCEDURE [dbo].[Test]
@t1 time,
@t2 time
AS
BEGIN
SET NOCOUNT ON;
declare @cmdString nvarchar(1000)
Set @cmdString = 'select * from Users inner join Persons on ''' + convert(char,@t1) + '''<=''' + convert(char,@t2) + '''';
exec @cmdString;

END

maryam za
یک شنبه 23 شهریور 1393, 13:37 عصر
واااای درست شد .... مرسی

mohammad reza beizavi
یک شنبه 23 شهریور 1393, 13:40 عصر
خوبه
یادآوری می کنم طبق تجربه ای که داشتم نحوه ی کم کردن دو مقدار time اینجور که استفاده می کنید نیست. بهتره آزمایش کنید تا نتیجه درست رو بگیرید.