PDA

View Full Version : سوال: رویه ذخیره شده و دو ورودی ولی مورد نیاز یکی



morteza_1234m
چهارشنبه 19 خرداد 1389, 15:49 عصر
سلام دوستان
من یک رویه ذخیره شده به صورت زیر دارم

USE [Bank]
GO
/****** Object: StoredProcedure [dbo].[Select-Customer-Short] Script Date: 06/09/2010 15:50:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Select-Customer-Short]
-- Add the parameters for the stored procedure here
@ShMeli nvarchar(50),@ShAccount Nvarchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
SELECT * from [Customer-Short]
where [Sh-Account]=@ShAccount Or [Sh-Meli]=@ShMeli
END

همون طور که می بیینید برای جستجو باید دو فیلد شماره ملی و شماره حساب رو وارد کنه کاربر تا جستجو انجام بشه
حالا کاری که من میخام بکنم اینه که ممکنه در برنامه کاربر بخواد بر اساس یکی از این فیلدها جستجو کنه و دیگری رو ندونه اینجا اگر یکیش رو وارد نکنه اررور میده که باید حتما هر دو رو وارد کنه کاربر ولی من نمی خوام این اتفاق بیفته

یک راه سادش اینه که یک رویه ذخیره شده جستجو بر اساس شماره ملی و یکی دیگه بر اساس شماره حساب بسازم و کد شرط رو در برنامه بنویسم که اگر فیلد فلان خالی بود از این رویه استفاده کن

من نمی خوام از این روش استفاده کنم و می خوام به همین روش پیش برم که در بالا اومد آیا راهی هست؟

mehrpars
چهارشنبه 19 خرداد 1389, 15:53 عصر
سلام دوستان
من یک رویه ذخیره شده به صورت زیر دارم

USE [Bank]
GO
/****** Object: StoredProcedure [dbo].[Select-Customer-Short] Script Date: 06/09/2010 15:50:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[Select-Customer-Short]
-- Add the parameters for the stored procedure here
@ShMeli nvarchar(50),@ShAccount Nvarchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
SELECT * from [Customer-Short]
where [Sh-Account]=@ShAccount Or [Sh-Meli]=@ShMeli
ENDهمون طور که می بیینید برای جستجو باید دو فیلد شماره ملی و شماره حساب رو وارد کنه کاربر تا جستجو انجام بشه
حالا کاری که من میخام بکنم اینه که ممکنه در برنامه کاربر بخواد بر اساس یکی از این فیلدها جستجو کنه و دیگری رو ندونه اینجا اگر یکیش رو وارد نکنه اررور میده که باید حتما هر دو رو وارد کنه کاربر ولی من نمی خوام این اتفاق بیفته

یک راه سادش اینه که یک رویه ذخیره شده جستجو بر اساس شماره ملی و یکی دیگه بر اساس شماره حساب بسازم و کد شرط رو در برنامه بنویسم که اگر فیلد فلان خالی بود از این رویه استفاده کن

من نمی خوام از این روش استفاده کنم و می خوام به همین روش پیش برم که در بالا اومد آیا راهی هست؟

توی همین procedure ت قبلش یک if بذار

mehrpars
چهارشنبه 19 خرداد 1389, 15:57 عصر
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

-- Insert statements for procedure here
if @ShAccount <> ''
begin
SELECT * from [Customer-Short]
where [Sh-Account]=@ShAccount
end
else
if ......
begin

end


END

محمد سلیم آبادی
چهارشنبه 19 خرداد 1389, 18:56 عصر
اینو امتحان کنید:

USE [Bank]
GO
ALTER PROCEDURE [dbo].[Select-Customer-Short]
@ShMeli nvarchar(50),
@ShAccount Nvarchar(50)
AS
BEGIN
SET NOCOUNT ON;
SELECT * from [Customer-Short]
where ([Sh-Account] = @ShAccount OR @shAccount IS NULL)
AND ([Sh-Meli] = @ShMeli OR @shMeli IS NULL);
END

morteza_1234m
پنج شنبه 20 خرداد 1389, 20:08 عصر
متاسفانه هیچ کدام از روش ها جواب نداد
و پیغامی که گفته شد میده

محمد سلیم آبادی
جمعه 21 خرداد 1389, 13:28 عصر
متاسفانه هیچ کدام از روش ها جواب نداد
و پیغامی که گفته شد میده

حالا کاری که من میخام بکنم اینه که ممکنه در برنامه کاربر بخواد بر اساس یکی از این فیلدها جستجو کنه و دیگری رو ندونه اینجا اگر یکیش رو وارد نکنه اررور میده که باید حتما هر دو رو وارد کنه کاربر ولی من نمی خوام این اتفاق بیفته

پارامترهایی که به پروسیجر ارسال می شوند بایستی حتما به تعداد پارامتر های ورودی پروسیجر باشند. زمانی هم که نمی خواهید تمام پارامترها مقدار دهی بشن بایستی با مقدار NULL به طور صریح مقدار دهی کنید.

فرض کنید می خواهید تنها بر اساس پارامتر اول جستجو صورت بگیره در نتیجه پروسیجر به این شکل اجرا میشه:

EXEC [dbo].[Select-Customer-Short] @ShMeli '12312312312', @ShAccount NULL;

ncs2008
جمعه 21 خرداد 1389, 17:08 عصر
آره متاسفانه منم همین مشکل را دارم من فقط توبرنامه یه if گذاشتم و تعداد sp ها را هم 2 تا کردم و درست شد ولی فکر نمی کنم این از نظرمنطقی درست باشد چون فقط تعداد sp ها می رود بالا باید یه فکر دیگه ای براش کرد.

محمد سلیم آبادی
جمعه 21 خرداد 1389, 23:03 عصر
آره متاسفانه منم همین مشکل را دارم من فقط توبرنامه یه if گذاشتم و تعداد sp ها را هم 2 تا کردم و درست شد ولی فکر نمی کنم این از نظرمنطقی درست باشد چون فقط تعداد sp ها می رود بالا باید یه فکر دیگه ای براش کرد.

گرچه من در پست های قبلی راه حلی برای این مساله ارائه دادم.
ولی می تونید به این مقاله رجوع کنید و روش مناسب را از بین روشهای موجود در مقاله انتخاب کنید.:
http://www.sommarskog.se/dyn-search-2005.html#introduction