En iyi yanıtlayıcılar
Full Text Search ContainsTable olayı kullandığım Stored Prosedure ü projeme entityframework ile aktaramıyorum.

Soru
-
Arkadaşlar SQL de yazdığım bu stored prosedure ü MVC projeme aktaramıyorum.
Prosedure yükleniyor fakat result değeri int olarak.
Didik didik ettim.Problemin Full Text Search Contains Table olayında sorgulanacak sorgu cümlesinden kaynaklandığını buldum.
Şöyleki gelen @Title değerini boşluk ile split edip bir tabloya aktarıyorum.
Sonra @SearchQuery nvarchar(500) değerine tablodaki değerleri aralarında "AND" olacak şekilde atıyorum.
Şöyleki;
@Title = "bu bir deneme" ise gelen @Title değeri
@SearchQuery = '"*bu*" AND "*bir*" AND "*deneme*"'
şekline getiriyorum ve ContainsTable da kullanıyorum.
Ama tabi kullanamıyorum :)
Execute Stored Prosedure ile kontro lettiğimde hata almıyorum.
Ama entityframework ile MVC projeme aktarırken result int olarak ekkiyor.
Tek tek satır satır denedim.
Sorunun ContainsTable da @SearchQuery değerini kullandığım için hatalı yüklüyor.
Nasıl çözebileceğim konusunda yardımlarınızı bekliyorum.
Teşekkürler.
Yanıtlar
-
Bu şekilde kullanıyorum şu anda hiç bir sorun yok
declare @seacrhQuery nvarchar(500);
Set @seacrhQuery=LTRIM(RTRIM(@Text));
declare @FixedName nvarchar(500);
set @FixedName = LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(@seacrhQuery,' ','><'),'<>',''),'><',' ')));
declare @Search nvarchar(500) = '';
select @Search += ((LTRIM(RTRIM(part))+' and ')) from [dbo].SplitString(@FixedName,' ')
set @Search = LEFT(LTRIM(RTRIM(@Search)), LEN(LTRIM(RTRIM(@Search)))-4);
set @Search = 'NEAR('+REPLACE(@Search, ' and ', ',')+')';
select @Search
select P.ID, PC.Title, SUC.Url, 'Type' = 'News' from [Modules.News.Contents] as PC
LEFT JOIN [Modules.News] as P ON P.ID = PC.PageID
LEFT JOIN dbo.[System.UrlSeo] AS SU ON SU.ContentID = P.ID and SU.Controller = 'News' and SU.Action = 'Detail' and (SU.IsSystemDelete = 0 OR SU.IsSystemDelete IS NULL)
LEFT JOIN dbo.[System.UrlSeo.Contents] AS SUC ON SUC.UrlID = SU.ID and SUC.LanguageID = @LanguageID
where (PC.LanguageID = @LanguageID)
and @IsActive_news = 1
and freetext(PC.Title, @Search)
- Yanıt Olarak Öneren Oğuzhan SARI 30 Mayıs 2017 Salı 21:20
- Yanıt Olarak İşaretleyen Oğuzhan SARII 30 Mayıs 2017 Salı 21:21
Tüm Yanıtlar
-
-
-
-
Bu olaydan hiç bir şey anlamadım gitti.
Deneye deneye bir hal oldum.
Sonuç olarak @SearchQuery değeri örneğin bunu dönüyor. > "saha*" AND "gücü*"
Execute Stored Prosedure de test ettiğimde.
Bunu elle yazıyorum.
Şu şekilde
inner Join CONTAINSTable([Modules.Pages.Contents], [Title], '"saha*" AND "gücü*"') as FTS on X.ID = FTS.[key]
O zaman prosedure sorunsuz entity ile yükleniyor projeye.
Ama gel gelelim @SearchQuery i yazınca proje yüklenmiyor.
Veritipindendir dedim.
Parametre olarak gelen @Title a varana kadar her değeri nvarchar olarak denedim.
Hatta bir de varchar olarak denedim.
Ama yok sıkıntıyı çözemedim.
Veritipi karakter sayısından mı kaynaklanıyor acaba.
nvarchar 500 yapıyorum.
-
Merhaba,
Sorunun devam ediyor mu? Ediyorsa kod bloğundaki
SELECT * FROM dbo.[Modules.Pages]...
Başlamadan hemen önce @SearchQuery değişkenini doldurduktan sonra Debug amacıyla görmeyi denedin mi? Gerçekten beklediğin gibi bir değer ile mi doluyor baktın mı?
SELECT @SerachQuery
http://ekremonsoy.blogspot.com | http://www.ekremonsoy.com | @EkremOnsoy
-
-
-
-
-
Yukardaki resmi incelersen dostum select içinde inner join CONTAINSTable var FTS ün özelliği
Nette araştırırsan araya eklenecek AND ve daha başka 2-3 seçenek olduğunu görebilirisin.
Şu anda kaynak gösteremeyeceğim kusura bakma. işlerim yoğum bitme noktasındayım :(- Düzenleyen ekined 10 Ocak 2017 Salı 18:11
-
Yukardaki resmi incelersen dostum select içinde inner join CONTAINSTable var FTS ün özelliği
Nette araştırırsan araya eklenecek AND ve daha başka 2-3 seçenek olduğunu görebilirisin.
Şu anda kaynak gösteremeyeceğim kusura bakma. işlerim yoğum bitme noktasındayım :(
Asıl soruma cevap vermemişsiniz. Neyse.
Eğer Exec kullanıyorsanız Procedure'un sonuna bir tane Select cümlesi yazın. Gerçekte hangi alanlar geri dönüyorsa o alanları barındırsın. Sonra procedur'u projenize ekleyin. Daha sonra da o eklediğiniz select cümlesini silin.
http://pgnchess.com
http://dergikapaklari.com -
-
Bu şekilde kullanıyorum şu anda hiç bir sorun yok
declare @seacrhQuery nvarchar(500);
Set @seacrhQuery=LTRIM(RTRIM(@Text));
declare @FixedName nvarchar(500);
set @FixedName = LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(@seacrhQuery,' ','><'),'<>',''),'><',' ')));
declare @Search nvarchar(500) = '';
select @Search += ((LTRIM(RTRIM(part))+' and ')) from [dbo].SplitString(@FixedName,' ')
set @Search = LEFT(LTRIM(RTRIM(@Search)), LEN(LTRIM(RTRIM(@Search)))-4);
set @Search = 'NEAR('+REPLACE(@Search, ' and ', ',')+')';
select @Search
select P.ID, PC.Title, SUC.Url, 'Type' = 'News' from [Modules.News.Contents] as PC
LEFT JOIN [Modules.News] as P ON P.ID = PC.PageID
LEFT JOIN dbo.[System.UrlSeo] AS SU ON SU.ContentID = P.ID and SU.Controller = 'News' and SU.Action = 'Detail' and (SU.IsSystemDelete = 0 OR SU.IsSystemDelete IS NULL)
LEFT JOIN dbo.[System.UrlSeo.Contents] AS SUC ON SUC.UrlID = SU.ID and SUC.LanguageID = @LanguageID
where (PC.LanguageID = @LanguageID)
and @IsActive_news = 1
and freetext(PC.Title, @Search)
- Yanıt Olarak Öneren Oğuzhan SARI 30 Mayıs 2017 Salı 21:20
- Yanıt Olarak İşaretleyen Oğuzhan SARII 30 Mayıs 2017 Salı 21:21