View Full Version : خطا در پروسیجر
monirprogram
دوشنبه 03 آبان 1395, 19:32 عصر
سلام دوستان. من یه پروسیجری برای جستجو داخل sql نوشتم. با دو تا از مقادیر فیلد مربوط به کدملی و سمت رو درست کار میکنه. اما روی fname و lname خطا میده موقع اجرا. نمیدونم چرا؟
ALTER PROCEDURE list_estekhdam_search@fname nvarchar(300),@lname nvarchar(300),@post int,@kodemelli char(10)
as
declare @strbase nvarchar(4000)
declare @query nvarchar(4000)
set @strbase='
select id,fname,lname,kodemelli,phonenumber,mobilnumber
,post from frm_estekhdam'
set @query=''
if @fname <> '' and @query=''
set @query=' where fname= N'+@fname
else if @fname <> '' and @query<>''
set @query=' and fname= N'+@fname
if @lname<>'' and @query=''
set @query=' where lname= N'+@lname
else if @lname<>'' and @query<>''
set @query=@query+' and lname= N'+@lname
if @post<>-1 and @query=''
set @query=' where post='+convert(nvarchar(8),@post)
else if @post<>-1 and @query<>''
set @query=@query +' and post='+convert(nvarchar(8),@post)
if @kodemelli<>'' and @query=''
set @query=' where kodemelli='+@kodemelli
else if @kodemelli<>'' and @query<>''
set @query=@query+ ' and kodemelli='+@kodemelli
set @strbase=@strbase+@query
exec (@strbase)
monirprogram
دوشنبه 03 آبان 1395, 19:34 عصر
البته بگم، خطاش هم اینه که فرضا من اسم reza رو سرچ میکنم. بعد خطا میده که Invalid column name reza
pashna
دوشنبه 03 آبان 1395, 20:58 عصر
ALTER PROCEDURE list_estekhdam_search
( @fname NVARCHAR(300) ,
@lname NVARCHAR(300) ,
@post INT ,
@kodemelli CHAR(10)
)
AS
BEGIN
DECLARE @strbase NVARCHAR(4000) ;
DECLARE @query NVARCHAR(4000) ;
SET @strbase
= ' SELECT id, fname, lname, kodemelli, phonenumber, mobilnumber, post FROM frm_estekhdam' ;
SET @query = ' WHERE 1 = 1 ' ;
IF @fname <> ''
AND @query = ''
BEGIN
SET @query = ' AND fname= N' + @fname ;
END ;
IF @lname <> ''
AND @query = ''
BEGIN
SET @query = ' AND lname= N' + @lname ;
END ;
IF @post <> -1
AND @query <> ''
BEGIN
SET @query = @query + ' AND post=' + CONVERT(NVARCHAR(8), @post) ;
END ;
IF @kodemelli <> ''
AND @query = ''
BEGIN
SET @query = ' AND kodemelli=' + @kodemelli ;
END ;
SET @strbase = @strbase + @query ;
PRINT @strbase ;
EXEC ( @strbase ) ;
END ;
monirprogram
دوشنبه 03 آبان 1395, 22:30 عصر
ALTER PROCEDURE list_estekhdam_search
( @fname NVARCHAR(300) ,
@lname NVARCHAR(300) ,
@post INT ,
@kodemelli CHAR(10)
)
AS
BEGIN
DECLARE @strbase NVARCHAR(4000) ;
DECLARE @query NVARCHAR(4000) ;
SET @strbase
= ' SELECT id, fname, lname, kodemelli, phonenumber, mobilnumber, post FROM frm_estekhdam' ;
SET @query = ' WHERE 1 = 1 ' ;
IF @fname <> ''
AND @query = ''
BEGIN
SET @query = ' AND fname= N' + @fname ;
END ;
IF @lname <> ''
AND @query = ''
BEGIN
SET @query = ' AND lname= N' + @lname ;
END ;
IF @post <> -1
AND @query <> ''
BEGIN
SET @query = @query + ' AND post=' + CONVERT(NVARCHAR(8), @post) ;
END ;
IF @kodemelli <> ''
AND @query = ''
BEGIN
SET @query = ' AND kodemelli=' + @kodemelli ;
END ;
SET @strbase = @strbase + @query ;
PRINT @strbase ;
EXEC ( @strbase ) ;
END ;
ممنون برای جواب. راستش درک نکردم چه تفاوت خاصی با مال من داره؟ و در اجرا خطا نمیگیره. اما جوابی هم برنمیگردونه
pashna
دوشنبه 03 آبان 1395, 23:57 عصر
سلام،
وقتی SP رو run میکنید، پنجرهٔ Messages ، کوئری سخته شدهرو برمیگردونه، میتونید اونو run کنید ببینید کجا اشکال داره
Davidd
سه شنبه 04 آبان 1395, 10:37 صبح
سلام. دلیلش عدم استفاده از کوتیشن ' در پارامتر های از نوع رشته ای است :
set @query=' where fname= N''' +@fname+''''
monirprogram
سه شنبه 04 آبان 1395, 17:39 عصر
سلام. دلیلش عدم استفاده از کوتیشن ' در پارامتر های از نوع رشته ای است :
set @query=' where fname= N''' +@fname+''''
بسیار عالی بود. و راه حلش بسیار ساده. :تشویق::تشویق::تشویق::تشویق:: شویق::تشویق:. درست شد. مرسی
Mahmoud.Afrad
سه شنبه 04 آبان 1395, 21:39 عصر
کوئری که نوشتید رو میتونید بدون نیاز به dynamic query هم بنویسید.
http://barnamenevis.org/showthread.php?520993-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%DB%8C%DA%A9-%DA%A9%D9%88%D8%A6%D8%B1%DB%8C-%D9%BE%D9%88%DB%8C%D8%A7
http://barnamenevis.org/showthread.php?340305-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D8%AA%D9%88%D8%B3%D8%B7-%D8%A7%D8%B3%D8%AA%D9%88%D8%B1%D9%BE%D8%B1%D9%88%D 8%B3%DB%8C%D8%AC%D8%B1-stored-procedure
http://barnamenevis.org/showthread.php?343579-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D8%AF%D8%B1-Database
http://barnamenevis.org/showthread.php?471215-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88%DB%8C-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-%D8%AF%D8%B1-Entity-FrameWork-(%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D9%88-%D9%81%DB%8C%D9%84%D8%AA%D8%B1-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%A7%D8%B2-%D9%82%D8%A8%D9%84-%D9%84%D9%88%D8%AF-%D8%B4%D8%AF%D9%87)
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.