# پایگاه‌های داده > SQL Server > مدیریت دیتابیس (Database Administration) >  تبدیل ی و ک عربی به ی و ک فارسی

## behsaman.it

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

----------


## sempay_ninjutsu

احتیاج به کد نیست زبان پایگاه دادت رو به persian_bin یا arabic__Bin2 تغییر بده درست میشه اگه نشد یه فارسی ساز کی برد از اینترنت بگیر

----------


## farzadism

سلام، ممنون از جوابتون، منم مشکل مشابهی دارم، از SQL 2005 استفاده میکنم، زبان persian_BIN که گفتین و نداره و من از Arabic_CS_AI_KS_WS استفاده میکنم و زیر ی ها نقطه میندازه. لطفا راهنمایی کنید

----------


## mohssen_mz

به هیچ وجه از persian_bin  استفاده نکنید چون حروف  "گپچژ" و ... رو نمیشناسه و اگر سورت بزنید روی ستون اول این حروف رو میاره و بعدشم شروع میکنه از الف به بعد . در کل مشکل داره .
میتونی راه حل رو در اپلیکیشن خودت بذاری (روی اسکی کدهاش)

----------


## benyaminrahimi

DECLARE @Table NVARCHAR(MAX)
DECLARE @Col NVARCHAR(MAX)
DECLARE Table_Cursor CURSOR  
FOR
    --پيدا کردن تمام فيلدهاي متني تمام جداول ديتابيس جاري
    SELECT a.name,	--table
           b.name --col
    FROM   sysobjects     a,
           syscolumns     b
    WHERE  a.id = b.id
           AND a.xtype = 'u' --User table
           AND (
                   b.xtype = 99 --ntext
                   OR b.xtype = 35 -- text
                   OR b.xtype = 231 --nvarchar
                   OR b.xtype = 167 --varchar
                   OR b.xtype = 175 --char
                   OR b.xtype = 239 --nchar
               )

OPEN Table_Cursor FETCH NEXT FROM  Table_Cursor INTO @Table,@Col
WHILE (@@FETCH_STATUS = 0)
BEGIN
    EXEC (
             'update [' + @Table + '] set [' + @Col +
             ']= REPLACE(REPLACE(CAST([' + @Col +
             '] as nvarchar(max)) , NCHAR(1610), NCHAR(1740)),NCHAR(1603),NCHAR(1705)) '
         )

    FETCH NEXT FROM Table_Cursor INTO @Table,@Col
END CLOSE Table_Cursor DEALLOCATE Table_Cursor

----------


## benyaminrahimi

برای از این به بعد هم از نوع nvarchar استفاده کنید و سعی کنید کلاینتاتون win xp نباشه که دیگه این مشکلات پیش نیاد پ

----------


## aa6649

اگر نباید کلاینت xp باشه  چی باید باشه تا این مشکلو نداشته باشه ؟

----------


## msabbaghi

یکدونه kbdf.dll از اینترنت پیدا کن و تو کلاینت های ویندوزت نصب کن تا مشکل کلاینت هاتم حل بشه

----------


## abedi66

*کوئری تبدیل ی و ک عربی به ی و ک فارسی*

----------


## joker

به نظرتون نوشتن تریگر موقع ورود دیتا در دیتابیس و تغییر کد کاراکترها به فارسی در اون لحظه بهتر نیست ؟ اینطوری کلاینت هم مهم نیست چه ویندوزی روش نصب باشه :)




CREATE TRIGGER TrueStr ON [dbo].[Table1] 
After INSERT, UPDATE 
AS 
Update Table1 SET [name] = REPLACE([name],NCHAR(1740),NCHAR(1610)) 



البته فکر کنم این دستور پدر دیتابیس را دربیاره ، و فقط برای رشته ورودی  قبل از ثبت باید کد نوشته بشه  که من نمیدونم ، دوستان sql کار زحمتشو بکشن لطفا

----------


## SayeyeZohor

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


--اسکریپتی برای یک دست سازی ی و ک در تمامی رکوردهای تمامی جداول دیتابیس جاری
-- اسکریپت زیر ی و ک عربی را به فارسی تبدیل می‌کند
-- در صورت نیاز به حالت عکس ، جای مقادیر عددی یونیکد را تعویض نمائید

DECLARE @Schema NVARCHAR(MAX),
        @Table    NVARCHAR(MAX),
        @Col    NVARCHAR(MAX)

DECLARE Table_Cursor CURSOR
FOR
   --پیدا کردن تمام فیلدهای متنی تمام جداول دیتابیس جاری
   SELECT    d.name, -- schema
            a.name, --table
            b.name  --col
   FROM   sysobjects a, syscolumns b, sys.objects c, sys.schemas d
   WHERE (a.id = b.id) AND (a.id = c.object_id) AND (c.type = 'U') AND (c.schema_id = d.schema_id)
          AND a.xtype = 'u' --User table
          AND (
                  b.xtype = 99 --ntext
                  OR b.xtype = 35 -- text
                  OR b.xtype = 231 --nvarchar
                  OR b.xtype = 167 --varchar
                  OR b.xtype = 175 --char
                  OR b.xtype = 239 --nchar
              )

OPEN Table_Cursor FETCH NEXT FROM  Table_Cursor INTO @Schema, @Table, @Col
WHILE (@@FETCH_STATUS = 0)
BEGIN
   EXEC (
            'update [' + @Schema + '].[' + @Table + '] set [' + @Col +
            ']= REPLACE(REPLACE(CAST([' + @Col +
            '] as nvarchar(max)) , NCHAR(1610), NCHAR(1740)),NCHAR(1603),NCHAR(1705)) '
        )

   FETCH NEXT FROM Table_Cursor INTO @Schema, @Table, @Col
END CLOSE Table_Cursor DEALLOCATE Table_Cursor


 :لبخند:

----------

