PDA

View Full Version : سلکت از جدول1 بشرطی که ستون1= !@#$%^&*)( باشد



modern_amin
یک شنبه 20 فروردین 1391, 18:15 عصر
با سلام خدمت اساتید عزیز
من میخام تو sql2000 محتویات جدول1 رو سلکت بگیرم بشرطی که
مقدار ستون1 اون برابر با !@#$%^&*)( باشه چیکار باید بکنم؟؟؟
تو sql2000 همه جوره خطا میده ،هم عادی هم like هم N
مثلا سلکت زیر
SELECT * FROM TABLE1 WHERE (col= '!@#$%^&*)(' )

.
.
البته تو sql2008 راحت جواب میگیرم ولی من نیاز به سلکت در sql2000 دارم

Galawij
یک شنبه 20 فروردین 1391, 19:06 عصر
سلام،
من 2000 ندارم، امتحان کنم ولی تو یک متغیر بریزید و بعد امتحان کنید. این مثال خود مایکروسافت هست:
CREATE PROCEDURE find_books @AU_LNAME char(20)
AS
SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%'
SELECT t.title_id, t.title
FROM authors a, titleauthor ta, titles t
WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id
AND a.au_lname LIKE @AU_LNAME

modern_amin
دوشنبه 21 فروردین 1391, 15:43 عصر
با سلام از پاسختون ، فکر کنم جواب صحیح و منطقی همینه ولی اینکار مشکل من رو حل نمیکنه
.
چرا ؟ چون استورپروسیژر روباید تو sql بنویسم و بعد تو اون برنامه از سروراکسپلور اونرو تو برنامم فراخونی کنم که باتوجه به اینکه من VS-2010 کار میکنم ، موقع
ساختن بصورت ویزاردی کانکشن پیغام میده که دیتابیس قدیمیه و باید حداقل 2005 باشه
.
آیا راه حلی هست که بتونم اون سلکت رو راحت بگیرم؟

nedata
دوشنبه 21 فروردین 1391, 15:53 عصر
من دستورتون را چک کردم خطا نمیده.
میشه بگید چه پیغامی میده؟

Galawij
سه شنبه 22 فروردین 1391, 09:08 صبح
آیا راه حلی هست که بتونم اون سلکت رو راحت بگیرم؟
لازم نیست حتماً با SP بنویسی. اون یک مثال بود که مقدار متغیر را از SP می گرفت. شما می تونید مقدار متغیر را با یک سلکت بدست بیارید و بعد مقایسه کنید.

modern_amin
سه شنبه 22 فروردین 1391, 13:22 عصر
ببینید دوستان مشکل تو 2000 اینه که
وقتی سلکت رو مینویسم و شرط میزارم متن چون شامل ( ) ' " % و... هست ، اس کیو ال2000 فکر میکنه که این علامتها دستورات هستند
SELECT * T1 WHERE (col1 = ' ")(!@#$%^&*''" " ')
.
منظور شما دقیق نفهمیدم ، میشه یکم توضیح بدید؟؟؟
ولی فکری که تو سرم بوده و بعنوان آخرین راه منه اینه که مثلا اونرو تو یک دیتاتیبل بریزم و بعد ازون سلکت بگیرم ، البته این موضوع با 100000 رکورد سنگین برنامه سرعت رو پائین میاره

nedata
سه شنبه 22 فروردین 1391, 14:31 عصر
مشكل شما اينه كه عبارت را بايد داخل ' قرار بدهيد به اينصورت
SELECT * T1 WHERE (col1 = ')(!@#$%^&*''"')

modern_amin
سه شنبه 22 فروردین 1391, 15:02 عصر
با تشکر از پاسختون ، اشتباه تایپی بود ، معذرت میخام ، موقع سلکت نحوه نگارش دستور رو درست انجام میدم
.
همینطور که تو سلکت نوشتید گفتید که عبارت رو داخل 2تا تک کوتیشن بندازم به اینصورت ' مقدار شرط '
ولی مثلا اگه بخام از خوده مقدار ' سلکت بگیرم
اس کیو ال نمیفهمه و به اولین تک کوتیشن ' که میرسه فکر میکنه پایان شرط هست
یعنی اونرو دستور میبینه ' !@#$%^&*()' " '

nedata
سه شنبه 22 فروردین 1391, 15:31 عصر
declare @i nchar(20)
Set @i= ' !@#$%^&*()'' " '
print @I

هرجا كه تك كوتيشن جز متن هست بايد دوتا تك كوتيشن بذاريد

Galawij
سه شنبه 22 فروردین 1391, 15:37 عصر
منظور شما دقیق نفهمیدم ، میشه یکم توضیح بدید؟؟؟
من منظورم این بود که مقدار را داخل یک متغیر بذارید و بعد با متغییر مقایسه کنید:
Declare @Parameter nvarchar(50)
Set @Parameter= N ' )(!@#$%^&*''" '
where yourField like @Parameter
جاهایی که تو پارامتر تک کوتیشن دارید دو تا تک کوتیشن قرار بدید تا آنها را لحاظ کند.

modern_amin
چهارشنبه 23 فروردین 1391, 13:44 عصر
عجب! در واقع شما میگید برای هر تک کوتیشن ، من باید 3تا تک کوتیشن بزارم تا اس کیوال بفمه؟ ' ' '

من بعضی اوقات چندتا تک کوتیشن دارم ، مثلا من تو یکی از دیتاهام حتی 5تا تک کوتیشن کنارهم دارم ، پس باید تو سورس برنامه مقدار ' رو
با 3تا تک کوتیشن replace کنم ، یعنی مثلا 5فیلد میشه 5*3=15
درسته؟

Galawij
چهارشنبه 23 فروردین 1391, 14:37 عصر
عجب! در واقع شما میگید برای هر تک کوتیشن ، من باید 3تا تک کوتیشن بزارم تا اس کیوال بفمه؟ ' ' '
من بعضی اوقات چندتا تک کوتیشن دارم ، مثلا من تو یکی از دیتاهام حتی 5تا تک کوتیشن کنارهم دارم ، پس باید تو سورس برنامه مقدار ' رو
با 3تا تک کوتیشن replace کنم ، یعنی مثلا 5فیلد میشه 5*3=15
درسته؟ سه تا نه، دو تا. شما اگر 5 تا تک کوتیشن دارید باید جدای از تک کوتیشن های اول و آخر Like، ده تا تک کوتیشن بذارید.به این مثال دقت کنید:

85576