PDA

View Full Version : مشکل در SP



FirstLine
پنج شنبه 29 بهمن 1383, 13:45 عصر
با سلام
این روال را در QueryAnalayzer که اجرا میکنم پیغام خطای زیر را میدهد!
ایراد از چیه؟



"اگرمستاجر ضمن عقد اجاره تصریح نماید که وجهی از بابت سر قفلی به موجر نپرداخته است وهنگام تخلیه
مورد اجاره حق دریافت سر قفلی را ندارد آیا این امر مسقط حق سر قفلی او خواهد بود یا نه ؟"
Server: Msg 7631, Level 15, State 1, Procedure dad_Law_Mortabet_List, Line 13
Syntax error occurred near 'ضمن'. Expected ''''' in search condition '"اگرمستاجر ضمن عقد اجاره تصریح نماید که وجهی از بابت سر قفلی به موجر نپرداخته است وهنگام تخلیه
مورد اجاره حق دریافت سر قفلی را ندارد آیا این امر مسقط حق سر قفلی او خواهد بود یا نه ؟"'.

با تشکر

ehsan707
پنج شنبه 29 بهمن 1383, 16:10 عصر
کدوم روال؟

FirstLine
جمعه 30 بهمن 1383, 07:17 صبح
با سلام
ببخشید یادم رفت . :oops:


CREATE PROCEDURE dad_Law_Mortabet_List @v_Law_Code [bigint] --, @SUM int OUTPUT , @v_i int OUTPUT
AS
--Read Law_Title
Declare @v_Str_Title nvarchar (500)
SELECT @v_Str_Title=Law_Title FROM Law_Laws WHERE Law_Code=@v_Law_Code

Set @v_Str_Title= '"%'+ @v_Str_Title + '%"'
Print @v_Str_Title


INSERT INTO Law_Mortabet (Mortabet_LawCode_Main, Mortabet_LawCode_Target) SELECT @v_Law_Code,Law_Code FROM Law_Laws WHERE CONTAINS(Law_Text, @v_Str_Title )
GO

خطا هم که بالاتر هست
با تشکر

AminSobati
جمعه 30 بهمن 1383, 23:30 عصر
با توجه به Topicهای دیگری که داشتین و پاسخهایی که دریافت کردین، آیا هنوز در این قسمت مشکلی هست یا برطرف شده؟

FirstLine
شنبه 01 اسفند 1383, 07:49 صبح
با سلام
با تشکر از راهنمایی شما استاد عزیز
متاسفانه با یه مشکل بزرگ روبرو شده ام
من یه بانک قانون با تعداد رکورد بالا دارم
یه روال بصورت زیر دارم


CREATE PROCEDURE dad_Law_Mortabet_List @v_Law_Code [bigint] --, @SUM int OUTPUT , @v_i int OUTPUT
AS
--Read Law_Title
Declare @v_Str_Title nvarchar (500)
SELECT @v_Str_Title=Law_Title FROM Law_Laws WHERE Law_Code=@v_Law_Code

Set @v_Str_Title= '"'+ @v_Str_Title + '"'
Print @v_Str_Title


INSERT INTO Law_Mortabet (Mortabet_LawCode_Main, Mortabet_LawCode_Target) SELECT @v_Law_Code,Law_Code FROM Law_Laws WHERE CONTAINS(Law_Text, @v_Str_Title )
GO

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


پیغام خطا
'قانون آئین دادرسی دادگاههای عمومی و انقلاب درامورکیفری'
Server: Msg 7631, Level 15, State 1, Procedure dad_Law_Mortabet_List, Line 13
Syntax error occurred near 'آئین'. Expected ''''' in search condition ''قانون آئین دادرسی دادگاههای عمومی و انقلاب درامورکیفری''.

روال را در این کرسر صدا میزنم


SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO


Use DadAfzar
GO

DECLARE Cursor_Law_Mortabet CURSOR
LOCAL
FOR SELECT Law_Code FROM Law_Laws
DECLARE @v_Law_Code [bigint]

-- Create the cursor set
OPEN Cursor_Law_Mortabet

DECLARE @counter int
SET @counter = 0

PRINT getdate()

WHILE @counter < 5
BEGIN
-- Retrieve a row into the variables
FETCH Cursor_Law_Mortabet INTO @v_Law_Code

Execute dad_Law_Mortabet_List @v_Law_Code

SET @counter = @counter + 1
PRINT @v_Law_Code
END

-- Release the cursor set
CLOSE Cursor_Law_Mortabet

-- Release the cursor
DEALLOCATE Cursor_Law_Mortabet

PRINT getdate()

مشکل اینه که باید تا دوشنه این کار را تمام کنم
از راهنمایی و توجه شما بسیار سپاسگزارم :flower:

با تشکر

AminSobati
شنبه 01 اسفند 1383, 20:13 عصر
دوست خوبم،
اگرچه یقین ندارم که هسته اصلی اشکال رو پیدا کرده باشم، اما تست این ضرر نداره(فقط Replace اضافه شده به SP):

ALTER PROCEDURE dad_Law_Mortabet_List @v_Law_Code [bigint] --, @SUM int OUTPUT , @v_i int OUTPUT
AS
--Read Law_Title
Declare @v_Str_Title nvarchar (500)
SELECT @v_Str_Title=Law_Title FROM Law_Laws WHERE Law_Code=@v_Law_Code

Set @v_Str_Title= REPLACE (@v_Str_Title,'''','')
Set @v_Str_Title= '"'+ REPLACE (@v_Str_Title,'"','') + '"'
Print @v_Str_Title


INSERT INTO Law_Mortabet (Mortabet_LawCode_Main, Mortabet_LawCode_Target) SELECT @v_Law_Code,Law_Code FROM Law_Laws WHERE CONTAINS(Law_Text, @v_Str_Title )
GO

FirstLine
یک شنبه 02 اسفند 1383, 07:47 صبح
با سلام
با تشکر از راهنمایی شما استاد عزیز
من در یک روال دیگه ابتدا تمام ' , " - _ « » و Enter های داخل @v_Str_Title یا Law_Title را حذف کرده ام
با تشکر

AminSobati
یک شنبه 02 اسفند 1383, 17:01 عصر
پس پیشنهاد میکنم SP رو از طریق Debug Interface سطر به سطر اجرا کنین تا دقیقا ببینین کدوم مقادیر باعث بروز اشکال میشن.

FirstLine
یک شنبه 02 اسفند 1383, 17:42 عصر
با سلام
وقتی به این رکورد میرسه پیغام زیر را میدهد:

پیغام خطا
'قانون آئین دادرسی دادگاههای عمومی و انقلاب درامورکیفری'
Server: Msg 7631, Level 15, State 1, Procedure dad_Law_Mortabet_List, Line 13
Syntax error occurred near 'آئین'. Expected ''''' in search condition ''قانون آئین دادرسی دادگاههای عمومی و انقلاب درامورکیفری''.


با تشکر

AminSobati
یک شنبه 02 اسفند 1383, 19:10 عصر
دوست من، به نظر میرسه خود این Title دارای علامت ' هستش. یکبار اون رو دستی اصلاح کنین و بعد از Rebuild کردن و Full Population، اجرای SP رو آزمایش کنین و ببینین آیا باز هم سر همین رکورد به اشکال بر میخورین یا نه..

FirstLine
شنبه 15 اسفند 1383, 11:26 صبح
با سلام
مشکل اولیه بخاطر اینه که داخل فیلد Title کلید Enter هم وجود دارد و چون من در کد

INSERT INTO Law_Mortabet (Mortabet_LawCode_Main, Mortabet_LawCode_Target) SELECT @v_Law_Code,Law_Code FROM Law_Laws WHERE CONTAINS(Law_Text, @v_Str_Title )
از

CONTAINS(Law_Text, @v_Str_Title )
استفاده کرده ام در برابر کد Enter خطا نشان میدهد :mad:

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


Print @v_Str_Title
BEGIN TRANSACTION
INSERT INTO Law_Mortabet (Mortabet_LawCode_Main, Mortabet_LawCode_Target) SELECT @v_Law_Code , Law_Code FROM Law_Laws WHERE Law_Text Like @v_Str_Title --CONTAINS(Law_Text, @v_Str_Title )
IF @@ERROR <> 0
ROLLBACK TRANSACTION
else
COMMIT TRANSACTION
لطفا راهنمایی بفرمایید. :oops: :flower:
با تشکر

esi022
شنبه 15 اسفند 1383, 11:52 صبح
http://www.windowsitpro.com/SQLServer/Article/ArticleID/20699/20699.html