PDA

View Full Version : سرچ رشته فارسی- انگلیسی و تریگر پارامتردار



p_plusplus
سه شنبه 15 فروردین 1385, 22:34 عصر
با سلام و خسته نباشید
چند تا سوال داشتم:
1- اگر فیلدی داشته باشیم که کلمات قارسی و انگلیسی با هم در آن بکار رود مناسب ترین دیتا تایپ برای آن چیست؟ من nvarchar رو انتخاب کرده ام درسته؟
بعدش برای سلکت کردن با استفاده از شرط روی این فیلد مشکل دارم. من عبارت فارسی - انگلیسی رو در تک کوتیشن و به همراه کاراکتر N در قسمت شرط کوئری میارم اما جواب نمیده.
2- آیا می توان تریگری نوشت که پارامتر بگیرد؟ مثلا" با دیلیت کردن رکورد 24ام رکود های بعد از آن (بعد از سطر 24) را تغییر دهد؟
ممنون میشم اگه جوابمو بدید. منتظرم.

h_baqery
چهارشنبه 16 فروردین 1385, 11:57 صبح
در مورد سوال اول نوع varchar هم برای کلیه نیازهای ترکیبیتون کافیه nvarchar برای زبانهای دیگر از قبیل چینی و ژاپنی و ... خوبه ، برای فارسی و انگلیسی varchar کافیه.
نوع فیلدتو varchar کن اگر جواب نداد نوع ارور یا منظور از جواب ندادن رو بگو.
2 - بله میشه .

AminSobati
چهارشنبه 16 فروردین 1385, 14:56 عصر
0) سعی کنید سوالاتی که از نظر مفهوم با هم مرتبط نیستند، در تاپیکهای جدا مطرح کنید تا دوستانی که Search میکنند روی تاپیکها، بعضی جوابها رو از دست ندن

1) حتما nvarchar انتخاب کنید. به عنوان یک قائده کلی، اگر کاراکتری غیر از Latin (حروف انگلیسی) ذخیره میکنید، باید از خانواده n مثل nchar, nvarchar, ntext استفاده کنید. استفاده از varchar برای کاراکترهای یونیکد ممکنه باعث از دست رفتن بعضی اطلاعات موقع انتقال اونها از جایی به جای دیگر (مثلا Export) بشه.

2) Trigger پارامتر نمیگیره و منطقا اگر چنین نیازی پیدا کردین، مطمئن باشید جایی از کارتون اشکال داره. لطفا نیازتون رو بیشتر توضیح بدین

h_baqery
چهارشنبه 16 فروردین 1385, 15:26 عصر
اگر فقط فارسی و انگلیسی باشه بازهم نیاز به یونیکد هست؟

فکر می کنم منظورشون از پارامتر گرفتن تریگر این باشه که پارامترش فیلدی از همان رکوردی باشه که داره حذف می شه.

p_plusplus
چهارشنبه 16 فروردین 1385, 17:11 عصر
سلام. جناب ثباتی ممنون از جوابتون.
0- اگه تنبلی اجازه بده چشم!
1- منم خودم nvarchar رو منطقی تر می دونم. اما نمی دونم چرا وقتی سلکت با شرط روی اون فیلد می گیرم هیچ رکوردی بر نمی گردونه. در صورتی که برای فیلدهای تمام انگلیسی یا تمام فارسی همچین مشکلی ندارم.
2- خودمم هر چی گشتم ندیدم تریگر بتونه پارامتر بگیره. ببینید من بطور خیلی ساده مثلا" یه فیلد ID دارم که با حذف یک رکورد می خوام بقیه IDهای رکوردهای بعد از رکورد حذف شده رو متناسب با شماره رکورد حذف شده دوباره مرتب کنم و به IDهای رکوردهای بالای اون کاری نداشته باشم. یعنی مثلا" یه همچین کدی را بعد از هر Delete اجرا کنه:
Update Table Set ID=ID-1 where ID>X
البته فکر می کنم با کرسر راحت میشه اینکارو کرد اما می خوام تریگر باشه.

h_baqery
چهارشنبه 16 فروردین 1385, 17:33 عصر
کافیه داخل تریگر ID رو از جدول Deleted انتخاب کنید و داخل یک متغیر قراربدید و دستورتون رو با اون متغیر اجرا کنید.

h_baqery
چهارشنبه 16 فروردین 1385, 17:39 عصر
من هم با varchar و هم با nvarchar امتحان کردم بدون N در شرط جواب درست گرفتم.

p_plusplus
پنج شنبه 17 فروردین 1385, 21:38 عصر
سلام. من مشکل اولمو حل کردم اما منظورتونو از "جدول Deleted" نمی فهمم. میشه با یه مثال بیشتر توضیح بدید؟
ممنونم.

hasina
چهارشنبه 24 آبان 1385, 14:01 عصر
سلام. من #c و sql کار می کنم. یه فیلد nvarchar دارم که توش فارسی نوشتم. ولی وقتی توی شرط می خوام ازش استفاده کنم با وجود اینکه قبل از کوتیشن N هم می زارم هیچ رکوردی رو بر نمی گردوونه. اگه کمکم کنین ممنون می شم.

whitehat
پنج شنبه 25 آبان 1385, 12:11 عصر
سلام. من مشکل اولمو حل کردم اما منظورتونو از "جدول Deleted" نمی فهمم. میشه با یه مثال بیشتر توضیح بدید؟
Deleted یک جدول سیستمی است که فیلد های پاک شده در آن ذخیره می شود که می توانید از آن در تریگر خود استفاده کنید، لینک زیر را ببینید
http://msdn2.microsoft.com/en-us/library/ms191300.aspx


سلام. من #c و sql کار می کنم. یه فیلد nvarchar دارم که توش فارسی نوشتم. ولی وقتی توی شرط می خوام ازش استفاده کنم با وجود اینکه قبل از کوتیشن N هم می زارم هیچ رکوردی رو بر نمی گردوونه. اگه کمکم کنین ممنون می شم.
لطفا بیشتر توضیح دهید، Query خود را اینجا بنویسید
باتشکر