PDA

View Full Version : نوشتن کوئری جستجو



elham1985
پنج شنبه 21 اردیبهشت 1391, 19:40 عصر
با سلام.

من میخوام واسه جستجو یک sp بنویسم که کاربر با در اختیار داشتن هر چند کدام از فیلدها، بتواند جستجو کند.(شبیه جستجوی پیشرفته) این رو نوشتم ولی انگار غلطه:

create procsrch(@City nvarchar(30),,@Lname nvarchar(20),@code int)
as
select City,Lname,code
from ST_tbl
where
City=@City and
Lname=@Lname and
code=@code


میشه بگید من چه تغییری باید بدم؟
ممنون

Reza_Yarahmadi
پنج شنبه 21 اردیبهشت 1391, 23:41 عصر
بصورت زیر امتحان کنید (هر پارامتری که کاربر وارد نکرده یا به SP پاس ندید و یا مقدار null پاس بدید
CREATE PROC srch(
@City nvarchar(30) = '',
@Lname nvarchar(20) = '',
@Code int = -1)

AS
Select City, Lname, Code
From ST_tbl
Where
(@City = '' OR City = @City) AND
(@Lname = '' OR Lname = @Lname) AND
(@Code = -1 OR Code = @Code)

pashna
جمعه 22 اردیبهشت 1391, 04:09 صبح
سلام، اینم یه روشِ ، دینامیک کؤری رو میسازه. اینم امتحان کنید، روشِ خوبیه



CREATE PROC srch
(
@City NVARCHAR(30) ,
@Lname NVARCHAR(20) ,
@Code INT
)
AS
BEGIN
DECLARE @Query NVARCHAR(500)
DECLARE @Where NVARCHAR(500)

SET @Where = ' WHERE 1 = 1 '

IF ( @City IS NOT NULL )
SET @Where = @Where + ' AND City = @City '

IF ( @Lname IS NOT NULL )
SET @Where = @Where + ' AND Lname = @Lname '

IF ( @Code IS NOT NULL )
SET @Where = @Where + ' AND Code = @Code '

SET @Query = ' SELECT City , Lname , Code FROM ST_tbl ' + @Where

PRINT @Query

EXEC sys.sp_executesql @Query,
N' @City NVARCHAR(30) , @Lname NVARCHAR(20) , @Code INT ', @City,
@Lname, @Code
END