PDA

View Full Version : سوال: null برابر قرار دادن فیلد با مقدار



hooooman
دوشنبه 26 اسفند 1387, 22:07 عصر
سلام
من تو 1 برنامه حسابداری 1 Sp نوشتم به این صورت :



CREATE PROCEDURE dbo.Test
@moin nvarchar(10),
@tafs1 nvarchar(20)=null,
@tafs2 nvarchar(20)=null,
@tafs3 nvarchar(20)=null
AS
select * fom TbDetailsVch where
ledger=@ledger and tafs1=@tafs1 and tafs2=@tafs2 and tafs3=@tafs3


حالا مشکل اینجاس که 1 کد معین ممکنه به تفصیلی 1 و تفصیلی 2 مرتبط باشه اما به تفصیلی 3 مرتبط نباشه یعنی ما مقدار null به Sp و متغیر @tafs3 بفرستیم .و قاعدتا :


tafs3=null

حالا وقتی این Sp اجرا بشه هیچ مقداری برنمیگرده !! چون حتما باید :


tafs3 is null

باشه!نمیدونم با این بیان قاصر!!! دوستان متوجه مشکل شدن یا نه
راه حلی به عنوان عیدی سال 88 به این موجود حقیر بدین

hassanf
سه شنبه 27 اسفند 1387, 04:55 صبح
سلام
با If باید مقادیر رو چک کنید و به ازای مقادیر مختلف Where رو تغییر بدید .
من با Dynamic sql این کارو انجام دادم(چون تعداد مقایسه ها کمتر میشه.)



CREATE PROCEDURE dbo.Test
@moin nvarchar(10),
@tafs1 nvarchar(20)=null,
@tafs2 nvarchar(20)=null,
@tafs3 nvarchar(20)=null
AS

Declare @E1 nVarChar(50),
@E2 nVarChar(50),
@E3 nVarChar(50),

If @tafs1 = Null
@E1 = ''
Else
@E1 = 'tafs1 = @tafs1 and'

If @tafs1 = Null
@E2 = ''
Else
@E2 = 'tafs2 = @tafs2 and'

If @tafs3 = Null
@E3 = ''
Else
@E3 = 'tafs3 = @tafs3 and'


Declare @Query nVarChar(1000)
Select @Query = 'select *
fom TbDetailsVch
where '
+ @E1
+ @E2
+ @E3
+ 1

Execute (@Query)