ورود

View Full Version : سوال: مشکل درSelect با استفاده از LIKE و % و نوع داده int



razavi_university
دوشنبه 08 مهر 1387, 23:23 عصر
سلام
برای یک برنامه می خوام SP برای جستجو بنویسم که تمامی فیلدهای موثر در جستجو را بگیرد و هر کدام که مقداری نداشت در نظر گرفته نشود.
در واقع در برنامه این فیلدها از کاربر گرفته می شود و کاربر فقط فیلدهایی که مایل است را پر می کند (یعنی خالی بودن یک فیلد به عنوان همه موارد آن در نظر گرفته شود)
این کد رو نوشتم ولی برای داده های Int به مشکل برخوردم انگار % با Int سر ناسازگاری دارد:افسرده:


CREATE Procedure [dbo].[spu_StudentInfo_Search]

@stdid int,
@stdmale bit,
@stdname nvarchar(20),
@stdfamily nvarchar(20),
@stdfather nvarchar(15) = NULL,
@stpid nvarchar(10) = NULL,
@grdid int = NULL,
@stdmajor nvarchar(50) = NULL,
@schid int = NULL,
@stdaddress nvarchar(50) = NULL,
@stdmember bit
As
Begin
--SELECT @stdid = '%' + (@stdid) + '%';
--SELECT @stdmale = '%' + (@stdmale) + '%';
SELECT @stdname = '%' + (@stdname) + '%';
SELECT @stdfamily = '%' + (@stdfamily) + '%';
SELECT @stdfather = '%' + (@stdfather) + '%';
SELECT @stpid = '%' + (@stpid) + '%';
--SELECT @grdid = '%' + (@grdid) + '%';
SELECT @stdmajor = '%' + (@stdmajor) + '%';
--SELECT @schid = '%' + (@schid) + '%';
SELECT @stdaddress = '%' + (@stdaddress) + '%';
--SELECT @stdmember = '%' + (@stdmember) + '%';




SELECT dbo.StudentInfo.stdid, dbo.StudentInfo.stdyear, dbo.StudentInfo.stdmale, dbo.StudentInfo.stdname, dbo.StudentInfo.stdfamily, dbo.StudentInfo.stdfather,
dbo.StudentInfo.stpid, dbo.StudentInfo.stdmail, dbo.StudentInfo.grdid, dbo.StudentInfo.stdmajor, dbo.StudentInfo.schid,
dbo.StudentInfo.stdphone, dbo.StudentInfo.stdcellphone, dbo.StudentInfo.stdaddress, dbo.StudentInfo.stdmember, dbo.StudentInfo.stdauthority,
dbo.Grade.grdname, dbo.SchoolType.sctname, dbo.SchoolInfo.schname, dbo.Grade.sctid
FROM dbo.Grade INNER JOIN
dbo.SchoolType ON dbo.Grade.sctid = dbo.SchoolType.sctid INNER JOIN
dbo.StudentInfo ON dbo.Grade.grdid = dbo.StudentInfo.grdid INNER JOIN
dbo.SchoolInfo ON dbo.StudentInfo.schid = dbo.SchoolInfo.schid

Where
stdid LIKE @stdid OR stdmale LIKE @stdmale OR stdname LIKE @stdname OR stdfamily LIKE @stdfamily OR stdfather LIKE @stdfather
OR stpid LIKE @stpid OR stdmajor LIKE @stdmajor OR dbo.StudentInfo.schid LIKE @schid OR stdaddress LIKE @stdaddress OR stdmember LIKE @stdmember
End
مشکلم فقط در قسمت Where است:عصبانی++:
چه کنم؟

KambizZandi
سه شنبه 09 مهر 1387, 01:54 صبح
شما بايد فيلد int رو ابتدا به رشته تبديل کنيد بعد تو like استفاده کنيد:

where convert(nvarchar(100), intfield) like '10%'