|
Страници по тази тема: 1 | 2 | >> (покажи всички)
Тема
|
Търсене по текст в цяла база данни
|
|
Автор | bultra (Нерегистриран) |
Публикувано | 03.12.05 08:46 |
|
Здравейте,
Някой има ли идея как мога да направя търсене по текст в цялата база данни на MS SQL?
Идеята ми е да намеря даден запис къде го има.
Благодаря
| |
|
търсене по текст в цялата база данни на MS SQL - търсене по текст във всяко текстово поле на всяка таблица, това ли искаш?
Ако не те мързи и базата е малка - правиш си всички селекти на ръка. Ако те мързи, погледни системните таблици, би трябвало да можеш да си направиш един селект, който да ти връща имената на таблиците и полетата (само тези, които са текстови) и после си въртиш цикъл по тях. Не съм се задълбочавала да гледам, пък и е прекалено рано още................. та... извини ме, ако говоря глупости...
Green Peas!
| |
Тема
|
Re: stored procedure
[re: devnul]
|
|
Автор | bultra (Нерегистриран) |
Публикувано | 03.12.05 10:25 |
|
да, точно това искам
Базата е голяма, освен това нямам идея къде би могло да го има, тъй като vendor -ите не ни дават пълно описание на базата и бизнес логиката, така че на ръка не става.
Май наистина ще пробвам с междинен селект да изкарам всички таблици, после всички полета и тях да ги вкарам в нов селект, благодаря
| |
|
join на sysobjects, syscolumns, systypes - май това ти трябва
правиш си cursor
в цикъл си съставяш селект и го изпълняваш
Така като гледам, май ще си се оправиш сам, успех!
Green Peas!
| |
Тема
|
Re: моля
[re: devnul]
|
|
Автор | bultra (Нерегистриран) |
Публикувано | 03.12.05 11:18 |
|
Ще измисля вариант без курсор.
Използването на курсор е много енергоемко откъм ресурси и въобще не се препоръчва при обработване на голям обем от информация.
По-скоро ще го направя с вградени селекти или пък ще вкарам резултатите от междинните селекти (които вадят таблици, полета...) в буферни таблици върху които да изпълнявам следващия селект
| |
Тема
|
Re: Търсене по текст в цяла база данни
[re: bultra]
|
|
Автор | Йopдaн (Нерегистриран) |
Публикувано | 03.12.05 18:01 |
|
google: "MS SQL" "full text search"
Full Text Searching is a free, optional component of MS SQL 2000. When installed, it offers a vast array of additional string querying abilities.
. . .
| |
Тема
|
Май нещо не си разбрал :)
[re: bultra]
|
|
Автор |
NikB (любопитен) |
Публикувано | 03.12.05 20:53 |
|
Май нещо не си разбрал :)
Идеята не е накрая да направиш общ селект, а да избираш една по една таблиците и да търсиш във всяко (текстово) поле на избраната таблица.
| |
Тема
|
Re: Търсене по текст в цяла база данни
[re: Йopдaн]
|
|
Автор | bultra (Нерегистриран) |
Публикувано | 03.12.05 21:07 |
|
Благодаря.
http://www.databasejournal.com/features/mssql/article.php/3441981
Все пак на пръв прочит и като гледам дадените примери това работи ако знаеш таблиците и полетаат (т.е. структураат на базата), а в моя случай аз не знам къде търся.
Иначе идеята е добра, още повече че Full Text Search е изнесено от БД сървъра и не пречи на performance-а.
Ще го активирам и ще пробвам - ще стане ясно
| |
Тема
|
Re: Май нещо не си разбрал :)
[re: NikB]
|
|
Автор | bultra (Нерегистриран) |
Публикувано | 03.12.05 21:58 |
|
Именно това ми беше идеята - да направя няколко итерации и накрая да получа това което ме интересува
| |
Тема
|
Re: Май нещо не си разбрал :)
[re: bultra]
|
|
Автор |
wqw (АзСъмЖив) |
Публикувано | 05.12.05 15:02 |
|
Виж това за идеи:
IF OBJECT_ID('usp_SearchTables') IS NOT NULL DROP PROC usp_SearchTables
GO
-- exec dbo.usp_SearchTables 'wqw%'
CREATE PROC usp_SearchTables (
@SearchText VARCHAR(1000)
) AS
SET NOCOUNT ON
DECLARE @SQL NVARCHAR(4000)
, @ParamList NVARCHAR(4000)
, @TableName SYSNAME
SET @ParamList = '@SearchText VARCHAR(1000)'
--- prepare temp table w/ columns/tables to be processed
SELECT c.COLUMN_NAME, c.TABLE_NAME
INTO #TmpCol
FROM INFORMATION_SCHEMA.COLUMNS c
JOIN INFORMATION_SCHEMA.TABLES t
ON c.TABLE_NAME = t.TABLE_NAME
WHERE t.TABLE_TYPE IN ('BASE TABLE') -- 'VIEW'
AND DATA_TYPE IN ('VARCHAR', 'NVARCHAR', 'CHAR', 'NCHAR') -- 'TEXT', 'NTEXT'
--- loop columns/tables
WHILE EXISTS (SELECT * FROM #TmpCol)
BEGIN
SELECT TOP 1 @TableName = TABLE_NAME
FROM #TmpCol
SET @SQL = NULL
--- construct WHERE clause
SELECT @SQL = CASE WHEN @SQL IS NULL THEN '' ELSE @SQL + ' OR ' END
+ QUOTENAME(COLUMN_NAME) + ' LIKE @SearchText'
FROM #TmpCol
WHERE TABLE_NAME = @TableName
--- construct IF EXISTS statement
SET @SQL = '
IF EXISTS ( SELECT *
FROM ' + QUOTENAME(@TableName) + '
WHERE ' + @SQL + ')
RAISERROR (''Found in ' + REPLACE(@TableName, '''', '''''') + ''', 10, 1) WITH NOWAIT'
-- PRINT @SQL
EXEC dbo.sp_executesql @SQL, @ParamList, @SearchText
DELETE #TmpCol
WHERE TABLE_NAME = @TableName
END
GO
cheers,
</wqw>
| |
|
Страници по тази тема: 1 | 2 | >> (покажи всички)
|
|
|