PDA

View Full Version : بازهم مشکل در sp



j.farazani
جمعه 30 شهریور 1386, 21:32 عصر
با سلام مجدد خدمت دوستان
میشه یک عزیزی لطف کنه و بگه ایراد این کد چیه؟

declare @text nvarchar(4000)
set @text =
'drop view [dbo].[accvwmoeen]'+char(13)+char(10)+
'GO'+char(13)+char(10)+
char(13)+char(10)+
'SET QUOTED_IDENTIFIER ON '+char(13)+char(10)+
'GO'+char(13)+char(10)+
'SET ANSI_NULLS ON '+char(13)+char(10)+
'GO'+char(13)+char(10)+
char(13)+char(10)+
'CREATE VIEW dbo.accvwmoeen'+char(13)+char(10)+
'AS'+char(13)+char(10)+
'SELECT Mid, title, des, Mtype, KollRef
FROM acc.acctlmoeen'+char(13)+char(10)+
char(13)+char(10)+
'GO'+char(13)+char(10)+
'SET QUOTED_IDENTIFIER OFF '+char(13)+char(10)+
'GO'+char(13)+char(10)+
'SET ANSI_NULLS ON '+char(13)+char(10)+
'GO'
exec (@text)
این هم نتیجه:

Server: Msg 170, Level 15, State 1, Line 2
Line 2: Incorrect syntax near 'GO'.
Server: Msg 170, Level 15, State 1, Line 5
Line 5: Incorrect syntax near 'GO'.
Server: Msg 170, Level 15, State 1, Line 7
Line 7: Incorrect syntax near 'GO'.
Server: Msg 111, Level 15, State 1, Line 9
'CREATE VIEW' must be the first statement in a query batch.
Server: Msg 170, Level 15, State 1, Line 16
Line 16: Incorrect syntax near 'GO'.
Server: Msg 170, Level 15, State 1, Line 18
Line 18: Incorrect syntax near 'GO'.


مطلب دیگه اینکه چه طور باید ' به عنوان بخشی از یک متن دستور وارد کرد

دوستان بزرگی میکنید

MShirzadi
جمعه 30 شهریور 1386, 21:54 عصر
برای نوشتن ' در دستور باید '' رو بنویسی یعنی هر رو تا '' یه ' ژرینت می کنه
و در مورد مشکبلت هم بگم میتونی بجای EXEC از Print استفاده کنی تا خروجی رو ببینی درست هست یا نه
Bye

j.farazani
شنبه 31 شهریور 1386, 13:33 عصر
سلام
mshirzadi عزیزم شرمنده کردی
از print استفاده کردم و نتیجه اون رو اجراء کردم و درست انجام شد و لی این طوری که اجرا میشه خطا میگیره. چرا؟؟؟؟؟؟/
لطف میکنی

MShirzadi
شنبه 31 شهریور 1386, 19:14 عصر
من دقیقا نمی تونم یگم مشکلت چی هست ولی این Error یه نظر من زمانی اتفاق می افته که دستور Go در جلوی دستور دیگه قرار گرفته باشه یعنی همش در یه خط نوشته بشه

AminSobati
شنبه 31 شهریور 1386, 22:42 عصر
دوست عزیزم،
در حقیقت عبارت GO جزو دستورات TSQL نیست و Compiler اون رو درک نمیکنه. دستور GO فقط توسط نرم افزارهای خاصی مثل Management Studio یا Enterprise Manager و همچنین sqlcmd به صورت قراردادی شناخته میشه و مفهومش این هست که دستورات هر Batch رو که با GO جدا شدن، بصورت گروهی به Compiler ارسال کنه ولی خود دستور GO ارسال نمیشه. در Dynamic TSQL شما به نوعی فرضا Query Analyzer رو دور میزنین و GO رو هم ارسال میکنین.
اگر واقعا قصد دارین Batch های جدا داشته باشید، در Dynamic TSQL راهی به جز جداگانه Execute کردن ندارین.

j.farazani
یک شنبه 01 مهر 1386, 22:35 عصر
با عرض سلام خدمت دوست و استاد عزیزم جناب sobati
درست فرمودید دستورات go را حذف کردم ومشکل حل شد
یک دنیا لطف کردید