PDA

View Full Version : sp برای حل مشکل جستجوی فارسی



elham1985
دوشنبه 11 اردیبهشت 1391, 22:39 عصر
با سلام.
دوستان من برای حل مشکل جستجوی حروف فارسی،این sp رو نوشتم:

create procedure Change(@name nchar(10))
as
insert into dbo.test_tbl(tname)
values(replace(@name,'ي','ی'))



حالا میخوام بدونم آیا درسته؟ اگر آره، الان چه جوري ميتونم "ك" و "ة" رو هم به اين دستور اضافه كنم؟

SReza1
سه شنبه 12 اردیبهشت 1391, 10:31 صبح
با سلام.
دوستان من برای حل مشکل جستجوی حروف فارسی،این sp رو نوشتم:

create procedure Change(@name nchar(10))
as
insert into dbo.test_tbl(tname)
values(replace(@name,'ي','ی'))



حالا میخوام بدونم آیا درسته؟ اگر آره، الان چه جوري ميتونم "ك" و "ة" رو هم به اين دستور اضافه كنم؟

ظاهرا كه درسته. بك مقاله آقاي صادقيان در اين خصوص گذاشته يك نگاهي به بخش "فهرست مطالب بخش SQL Server " بنداز.
به نظر من اكه ميخواهي اينكار رو بكني يك تابع بنويس. يك بار replace حرف ي و يكبار replace حرف ت . البته همانجا هم ميتوني دوباره يك replace ديگر بذاري.
مثل


replace((replace(@name,'ي','ی')) , @C , @B)

كه c و b همان كاركترهاي ك و كاف عربي هستند و ...

sajjad_kochekian
جمعه 13 مرداد 1391, 11:28 صبح
این SP ‌را فکر کنم از همین سایت برداشت کردم ولی دو تا مشکل داشت یکی اینکه مشکل حرف ی را در ویندوز 7 حل نمی کرد و دوم اینکه از Schema پشتیبانی نمی کرد که برای خودم درست کردم گفتم دوستان هم استفاده کنند


CREATE procedure [dbo].[ChangeCodePage]

@TblName varchar(100) = '',@schema varchar(50)='dbo'
as

set @TblName = ISNULL(@TblName, '')

select ROW_NUMBER() over (order by TBLs.TABLE_NAME, COLs.COLUMN_NAME) Row, TBLs.TABLE_NAME TblName, COLs.COLUMN_NAME ColName
into #t
from INFORMATION_SCHEMA.TABLES TBLs
join INFORMATION_SCHEMA.COLUMNS COLs on TBLs.TABLE_NAME = COLs.TABLE_NAME
where TABLE_TYPE = 'BASE TABLE'
and DATA_TYPE in ('char', 'nchar', 'varchar', 'nvarchar')
and (TBLs.TABLE_NAME = @TblName or @TblName = '')
AND (TBLs.TABLE_SCHEMA=@schema OR @schema='')

declare @x varchar(1000)

create table #errors(Error varchar(1000))

declare @i int
set @i = 0

while 1 = 1
begin
set @i = (select top 1 Row from #t where Row > @i)
if @i is null
break

select @x = 'update ['+@schema +'].[' + TblName + '] set [' + ColName + '] = Replace( Replace( Replace([' + ColName + '], nchar(1603), nchar(1705)), nchar(1609), nchar(1610)), nchar(1740), nchar(1610))'
from #t
where Row = @i

begin try
exec(@x)
end try

begin catch
insert into #errors
values(char(13) + char(10) + 'ERROR: ' + char(13) + char(10) + @x + char(13) + char(10))
end catch
end

if @TblName = ''
select *
from #errors

print 'CODE PAGE GHANGING DONE!'

drop table #t
drop table #errors