Разделы
Публикации
Популярные
Новые
Главная » Оптимизация производительности transact

1 ... 44 45 46 47 48 49 50 ... 55

cXtC bp L.sa9fc @ODjectnane=spjei-erite >C--pt.gaesc-ctrcei ales a ceadcr sciipL to- ar cDjeci or couection of oojects.

(?parari;eters=[&objectname- Object name or ciask (defauits bo ai ! object m current

database) ][ .(poutputrame= 0utput filename (Default; iaobjectname+ .SQL . or

GLNlRAT!-;d SCRIPT.SOL tor- entine database)]

r .Siscriptcptions=Ditmask specifying scnipt genenation options]

[ ,@senver= senven name ]L. @u5enname= usen name ][. iapasswond= Dassword ],

(?author=t(en Henderson. ?etiail = khen(3khen.com.

@vers;on=7, Pnevlsion=0.

iadatecreated=199804Cl. (adatelastchanged=1939C702.

C=examp!e=sp generate scnipt @objectname=authors. (?cutputname=autnors.sq

RETURN -1

EXEC sp genenate scnipt authors 1 me

set quoted identifler OFF

NULL

CREATE TABLE [authors] ( [au id] [Id] NOT NULL , [au lname] [vanchan] (40) NOT NULL , [au fname] [varchar] (20) NOT NULL .

[phone] [char] (12) NOT NULI CONSTRAlNi [DF authors phone 09UE7BCCj

DEFAULT (UNKNOWN).

[acdness] [varchar] (40) NULL ,

[city] [varchar] (20) NULL .

[state] [char] (2) NULL ,

[zip] [char] (5) NULL .

[contract] [bit] NOT NULL .

CONSTRAINT [UPKCL auldind] PRIMARY KEi CLUSTERED

[auid] ) CN [PRIMARY] .

CHECK (([au id] like LO-9][0-9][0-9]-[0-9j[0~9j-[0-9j[0~9j[0-9i [0-9])).

CHECK (([zip] like [0-9][0-9][0-9][0-9][0-9]))

Этот код демонстрирует несколько )Н1тересных технических приемов. Разберем некоторые из них.

Процедура начинается с иницимизации объектов DMO - объекта SQLServer и объекта Transfer. Объект DMO SQLServer представляет собой базовый уровень доступа - с его помощью выполняется подключение к серверу и организуется доступ к другим объекта.м сервера. Объект Transfer инкапсулирует технологии связи сервер-сервер, сервер-файл, а также технологию переноса данных. Процедура sp generate scrlpt использует его для генерации сценариев SQL.

После создания объекта Transfer процедура определяет, хочет ли пользователь сфор.мпровать сцепарий для всей базы данных или только для выбраттых объектов. Это различие имеет большое значение, поскольку при формирова1гии сценария для всей базы DMO перечисляет объекты в порядке, учитывающем нх



зависи.мость лр}г от друга. Если cuenapnii (jx)p.\i]ipyerc>i .тить дли пол.чиюжест-ва oobCKTOii базы даниы.х, процедура открывает ку])сор по таблица.м sysobjects и systypes (с нсиользовапие.м конструкции UNION ALL), зызьпшет .метод AddObject-ByName объекта Transfer и помечает обч^екты базы даниых од1Ш за другим для включения в сценариГг

Затем процедура использует объект SQLServer в целях поиска базы ла1И1ых, содержаще!! объекть!, для которых со.здается сце!{ари!1 Поиск базы да1!И!,1х осуществляется посредством обращения к коллекц!!И Databases. Обь!чно объекты DMO предоставля!ог доступ к коллекциям, содержа!цим другие объекты. К элементам этих коллекций мож!!о обращаться как по !1мени, так н по порядковому индекс}. В случае процедуры sp generate script обраще1!ие к .-)леме1!та.\1 1;оллек-ций все!да осуществляется по и.ме!!!!.

Когда процедура !!Олучает указатель на нужную базу да!1!11лх, oi!a вызывает .метод ScriptTransfer соответствующего объекта Database, передавая е.му в качестве 1!араметра заранее созда11!!ь!й объект Transfer. В результате генерируется сценарий SQL, содержащий требуе.мь!е объекты.

Закл!0чителы1Ы.м шагом процедурь! является выдача сценария в виде возвращаемого !габора дан!гых. Пользователь, вызывающи] ! 1!роиелуру, об!лчно ожидает сразу же увидеть его на экра1!с. Есл!! 3!1аче!1ие параметра (Sresultset = YES (по у.молча!И1!о), !!роцедура sp generate script вызывает sp readtextfile для выдачи пол1)30вател!0 вновь сгенернрован!10го сценар!1я в !Н1де возвращаемого набора. В качестве друтюго париа!{та процедура могла бы возврат! 1ть указатель па курсор, содержащий сформированный cuenap!iii.

Заключение

Хотя в прежн!1х версиях SQL Server Transact-SQL иногда оказь!вался единст-венн!з1м средство.м решения задач, с улучшением графпческ1!Х средств ад.м!1ни-стрирова!!ИЯ необходи.мость в 1!рпме1!ени!1 Tiansact-SQL для выполнен!1я ад.чш-Н1!страт]!вных задач снизилась. Это 3!!ачит, что !1Спол1>зован!1е !рафических средств должно быть основным способом управления серверами. Те.м не .менее мо!ут возн!1кать ситуации, когда воз.можности Enterprise Manager и остальных графическ!1х утилит не M017T удовлетворить ваши !Тотребности. В этих случаях для заполнения !!робелов в их функциональности вы можете задействовать про-цедур1)1, представленные в этой главе, наряду с процедура.ми и сце!!ариями, на-писанны.ми вами са.мосгоягелы!о.



Полнотекстовый поиск

Хот>1 г. инженерии опрсдс.uliiid cctI) .).1с.ме1Гг Искусства.

тичго ие иитсресхсг цвет ру.хиуыпего .моста, уиссшего жиаии ияз'илесяти Человек.

Л'. В. Кентоп

Способность искат], по строк Овы.м н тексччлпч.м нелчя.м ие нова в .мире бав данных SQL. На нротяжетп! .многих лет О'БД у.меют искать строки п строковььх и текстовых полях. Однако эти вов.чюжпостп. как н|)авп.чо, в лучшем ечучае недоразвиты. Исторически сложилось, что встроетиче в SQL Server средсчва поиска текста ие были разнообразны - .можег, чуть бо.чьшс, че.м (чтответствуюшие AKSL но не более того. Можтю сравтшать ct)()K;i (как и все тины данных), искать шаблон в строке, используя LIKE и PATINDEX(), но воз.чюжен поиск то.чько близко расположенных или производных слов.

Недавно появившаяся встроенная но.тде|)Жка ио.точексчового иидекси[)ова-иия из.менила ситуацию. Обычно проектировищки базы ла1тых, которые хотели получить развитые с[)едства поиска тексча, бы.чи вьтуждепы ио.чагаться на шлюзы баз данных, ({)айлы oneiiainionnoii снсте.\ил и внешгше i\o отиоигеипю к SQL Server технологии. Теперь это не так. С.чужб.ч .Microsoft Search предоставляет функции нолиоцепиого иолиотскстового поиска, такого как Microsoft Index Server (осиованивй! на файлах noiKTtoBbiii .мсхпнпз.м оисращюнггой системы), в ра.мках SQL Server. Ои при.меияетея для создания .\1егала1И1ых, необходимых для иолпотекстового поиска и д.чя обработки по.чцотексто1и>!х запросов. Служба работает только иа Windows КТ Ser\er (по пс иа Windows NT Server Enterprise Edition в кластеризоваиной с|)едс) и .можчт быть доступна клпеита.м SQL Server иа NT Workstation и Windows 9х.

Данные, которые храпит Microsoft Search, ~ по.пючхкстовые пидексы и ии-форматщя каталога, которую служба исио.чьзхст .ч.чя выио.чие1Н1я BairpocoB, не .хранятся в обычных cиcчeиилx таб.чицах и не могут быть получены иапря.мую из SQL Server. Они хранятся в фай.чах onepaiiHonnoii системы и доступны только самой службе и ад.\тиистра1Ч)ра.м NT. Можчю рассматривать Microsoft Search как текстовый сервер, подобт) то.му как SQL Server .можно рассматривать как сервер баз данных - он получает запросы и инструкции относительно полио-

16 -(.1к 71:



текстового поигк'а и возвращает подхоляишс релультатьк Единственный к.гнент этой службы - SQL. Server, что н является .механи.з.мо.м доступа к с.чуж'бс.

ВНИМАНИЕ-----------

Для того чтобы уаэновить Microsoft Search, выберите опцию Full-Text Search в диалоге выбора компонентов программы установки SQL Server (эта опция доступна только на Windows NT Sen.er). После того как служба установлена, она должна быть запущена и должен быть включен полнотекстовый поиск для уровня базы, таблицы, столбца.

Настройка полпотекстовых индексов - не олтюигаговая процедура. С увелн-чешге.хг гибкости часто возрастает сложность. Процесс nacTpoiiKir указанного столбца таблицы, для того чтобы он участвовал в полнотекстово.м нонске в предикате CONTAINSO и в фу1Н<1Н1н FREETEXTTABLE(). включаег шесть luaiOB, Они перечислены ниже,

1. Полнотекстовое индексирование дorжнo быть включено для базы.

2. Полнотекстовый каталог должен быть со.здан для базы.

3. Полнотекстовое индексирование должно быть включено для цетевон таблицы н связано с полнотекстовым каталогом.

4. Сто;1бец должен быть добавлен к гголнотекстовому индексу таблицы.

5. Полтютекстовый индекс далее должен быть актнв1грован.

6. Полнотекстовый каталог должен быть заполнен. Заполнетпш может быть пол1И)1.\г или инкре.меитальны.м. Разумеется, первое занолненнс полпотсксто-вого шщекса всегда должно быть полным. Последующие заполнения хюгут быть инкре.ментатьны.мп, если таблица содержит столбец тина timestamp и .метаданные таблтнгы ие нз.менплись с момента последнего заполнения.

Как и в большинстве ад.чннтстратнвных задач SQL Server, лучши.м средством для создаиггя полнотекстовых индексов является Enterprise Manager. Процесс слишко.м уто.мнтельный, чтобы повторять его вручную. Поскольку эта книга не посвящена Enterprise Manager и графическ1гм утилнта.чг, вот код, иллюстрирующий настройку полиотекстового поиска но столбцу при помонщ только Transact-SQL (я нрону.меровал шаги в коде, чтобы соотнести их с приведенны.м выше списко.м):

USE pubs

DECLARE Otabiename syseame. catalogname sysname, @indexname sysname,

(acoiumnname sysname

SET @tablename=pub info

SET @catalogname=pubsCatalog

SET @indexname=UP,KCL puDinfo

SET (acoiumnna[i;e=pr info

-- ШАГ 1; Включить полнотекстовьж поиск для базы

EXEC sp fulltext database enable

-- ШАГ 2: Создать полнотекстовый каталог

EXEC sp fulltext cata1og @catalogname, create

-- ШАГ 3; Создать полнотекстовый индекс для та6ли1ы

EXEC 5p ful 1 text tablе @tablename,create.@catalogname.Ф^rdexname

-- ШАГ 4: Добавить столбеи в созданный индекс

EXEC sp fulltext column gtablename, @columnname, add



-- ШАС 5: Акт/вировать созданный индекс

EXEC sp fulUexi table @tablename.activate

-- ШАГ 6: Заполнить созданный полнотекстовый каталог

EXEC sp fu !ltext catalog gcatalograme. start full

Данный код создает нолнотекстовое индексирование иа столбце pr info таблицы pubs.pubjnfo. Этот столбец имеет тин text, поэтому является хороши.м кандидатом на полнотекстовое индексирование. Для простоты код делает массу до-нушений, которые могут быть неверны в реальной среде. Напри.мер, ие проверяется, что нолнотекстовый каталог сушествует до того, как предпринимается попьптса создать его. Если каталог уже существует, вьшолнеиие оператора и всего пакета завершится неудачей. То же самое касается иолнотекстового индекса на таблице pubjnfo. Каждая таблица может иметь только один полнотекстовый индекс. Попытка со.здать второй полнотекстовый индекс или пересоздать сушествуюший приведет к ошибке. Код служит исключительно для демонстрации основ тшстройки полнотекстового индексирования при по.мощи Transact-SQL.

Большая часть информации, т1еобходимой нам перед вызовом полнотекстовых хратш.мых процедур, доступна через* функции .метаданных. Например, можно использовагь функцию FULLTEXTCATALOGPROPERTY() для определент1я того, сушествует ли указанный каталог (функция возвраптает NULL, если каталога с указанным имеие.м не существует). Можно определить, есть ли у таблицы нолнотекстовый индекс, при помощи фупкции OBJECTPROPERTkO, и добавлен ли указанный столбец к полиотекстово.му индексу при помощи функции COLUMNPROPERTkO. Вот хранимая процедура, использующая эти функции и некоторые другие для настройки иолнотекстового поиска но столбцу. Оиа существенно надежнее, чем предыдущий при.мер и намного безопаснее для применения в реальной среде:

USE master GO

IE 0BJEC1 ID(sp enable fulltext) IS NOT NULL DROP PROC sp enable fulltext

CREATE PROC sp enable fui Itext Ptablename sysname, (acolumnname sysname NULL.

@catalogname sysname=NULL. @stantservcr varchar(3)=N0

Обьекг: sp enaDie fulItext

Описание; Включает указанный столбец в по.лнотекстовый поиск

1Лспользование; sp enable ful Itext @tablename=name of iiost table. @columnname=column to set up.

[ .(acatalogname=name of full-text catalog to use (Default; DB NAME()+ Catalog )][.@startsrever=YESNO specifies whethen to start the Microsoft Search service on this machine prior to setting up the column (Default; YES)] Результаты; (None)

Создан: Ken Henderson. Email; khenPkhen.com

Пример: EXEC sp enable fulItext pubs, .pubjnfo . pn info .DEFAULT. YES

Создан: 1999-06-14. Изменен: 1999-07-14.

SET NOCOUNT ON

IF ((atablename=/l) OR (gcolumnname IS NULL) OR (OBJECT ID((atablename) IS NULL) GOTO Help

-- Нолнотекстовый поиск не установлен

IF (FULLTEXTSERVICEPROPERTY(!sFulltextInstalled)=0)



BEGIN

RAISEKkOk ir.e ihcrcsGrt ъе: ki li /vj: ir-slcbcC cr server

%s , 16, lO.ftaSERVER.WIE) RETUk.N -1

DECLARE gcaiaEocsfatjs mt. Сй-гц1е<пагле sysriaiie If (UPPER(Ps;artserve-)=YtS)

EXEC rtdste. .xpcmdsnel i NE STAR rnssearcn. .no cutpbt

IF (lacaLalcgrame IS NULL)

SET ?cdta 1 cgrai:;e=DB NAMi:;)- Csia 1 eg

CREATE TABLE #inae.xes ( -- Используется ,ггя палождеш-я ун/ка1:ьнс|0 ингенса

Qua nf ler sysnaine NULL,

Owner sysna-ne NULL.

TableNd.iie sysname NULL.

NonUnique smallint NUL! .

indexOualifier sysname NUIL.

IndexName sysname NULL,

Type smallint NULL.

Positionlnlnoex smallint NULL.

ColunnName sysnaie NULL.

Collation chard) NULL.

Cardinality int NULL,

Pages int NULI ,

Fi iterConcition sysnarrrc NULL)

INSERT #indexes

EXEC sp statistics Otablenarae

SELECT @indexnaniencexNarr,e FROM fidexes лНЕР! Ncnlinique-O -- Получить

--уни1<альнь1Й индекс таОлиць, (пос>тедний из, если их несколько)

DROP TABLE #inOexos

IF ((Sindexname IS NULi) BEGIN -- Если уникальных индексов не, прекратить

-- вь.тшлнение

RAISERROR(No suitaole unique incex found on table ?s,i6,lC,@tablenaTie) RETURN -1

IF (DATABASEPROPERIY(DB ,NAME(),IsFulltextEnabled)<>lj -- Включить

-- пслнотексювый поиск д.тя базы

EXEC sp fulltext ddtabasc enable SET @catalogstatus=FULLTEXTCAr/iL0GPRCPERT!i?c3ralogname. PopulateStatus)

IF (Ptatalogstatus IS NULL) - Каталог не cyisiecreyei

EXEC sp fulltext catalog gcatalogiMme, ceete ELSE IF (gcatalogstatus IN (0,1.3,4,6.7)) --мполпсние Бы,лолпяется, -- прервано, восстанавливается, добавочное наполнение выполняется или -- обновляется индекс

EXEC sp fulltext catalcg Peatalogname. stop

IF (0BJECrPR0PERTY(0BJECT IC(iat3blename), TableHasActiveFull Textlndex)=0) -- Создать полнотекстовы')! индекс, если он не создан

EXEC sp fulltext table latablerame,create,@catalogname.@indexname ELSE



чтобы мож'-о бь.то знеси испоазлемия

IF (CCLUMKPRO-[RTv;CEJFC; ID((at,aDiera:Tcj,S:co3inno ;e. МзЕиЛтехтЫбслес! }-0) -- Добавить

сгслбеи X индексу BtGIN

FXtC bo t .I :Tt;AL cojnn &lacenaMic, 3ccп. и га:г£. uJd PRUr 5bcce53fu!y acdec a funtexr. nee тс -тао'епаме . +Pcoli.nr;naine- 1n database DB NAHF;) END ELSE

PRINi Column * @с&11.1пппате * m iaoe + CB NAME(; + + {ptdbiename is already fulItext indexed

EXEC SD fbl ltext table СНаоЧ>гате,acfvate

EXEC sp fu;lte,xt catalog gcatalogname, star-t tuir RETURN С

Help:

EXEC sp usage C<iobjectnar,e=spenable fu Itext .(pcesc- Er.a-bles full-text indexing for a spec-fied column,

@paraneters=!atablenarie-name of host table. !acolumnnaiT,e=coljmn to set up. [.(?catalcgname=n3me of ful-text catalog to use (Default: DB NAME()-b Catalog ;j[ ,0startsrever=YES!.\O specifies whethen to slant the Micnosoff Search service on ths machine prior to setting up the column (Default: YES)].

Ceauthor=Ken Hencerson. (?emdil = khen(okhen.com. (adatecredted=19990614 .(adatelastchanged=;9990/14,

@example=EXEC sp enable fulItext puos..pub info . pn info .DEFAULT. YES RETURN -1

sp enable fulItext pub info.pr info

Successfully added a fulItext index for pub infc.pr info in database pubs

Эта процедура выполняет .много интересных onepanini. Начинается она с проверки, установлена лн служба Microsoft Search. Если нет, процедура завершается немедленно. Далее она использует xp cm(jshell для запуска службы Microsoft Search, если это требовалось. Команда ие вызывает эффекта, если служба уже заиуптена. Делается это при ио.мопш ко.манды онерацнониой системы NET START mssearch. NET START иредставляет co6oii ко.манду Windows NT для запуска служб, mssearch - внутреннее и.мя службы Microsoft Search. Также .можно запустить службу при П0М0ПЦ1 Enterprise Manager, сценария службы из Панели управления или SQL Server Services Manager.

JXiviee процедура получает уникалышн ! ключевот! индекс для указанно!! таб-л!!!№!. Добавлен1!е !толиотекстово10 !!ндекса требует !!ал1!Ч1!я у табл1!ЦЬ! у!!!!каль-ного кл!очево!-о !!ндекса. Здесь процедура направляет результать! работы процедуры sp statistics (вь!водяще!1 все т!!!дексы указа!!1!01! таблицы) во временну!о табл!!цу прт! П0М0Щ1! ко!!струкци1! INSERT...EXEC !! далее ищет во временной таб-л!!це уи1!ка.,ть!!Ь!Й индекс. Есл1! таковой не !!айлен, !!роцедура пре!фа!цает вы-

!!ОЛ!!еИИе.

Далее !!роцедура !!роверяет, вкл!Очено л!! нолнотекстовое индекст!рование для указан!той базы. Есл!! это !!е так, оно вкл!очается. Далее код проверяет ста-



гус по.шотскгтоишч) ката.чоса. Er.iii он ие г\Щ(,ч'т'иуег. кол coii.iaer ci4j. Ec.ih он активен, кол останавливает сто, чтобы eio .можно было намсият! . Эп) соответствует шагу 2 и.з приведенного списка.

Как только но.тнотекстовьи ! ката.тог напроен, кол го.зласт но.тиотскстовы!! индекс д.тя таблицы после проверки при по.мощп OBJECTPR0PERTY() на сушест-в<.)панпе 110Л1к)тскстового индекса. И.менно здесь исполь.зхстся \т1ика.т.ьньп1 индекс, найденньй! ранее.

После того как создан тхтнотекстовьп ! индекс, процедура лобав.тяег к не.му указанны!! столбец. Д.-1Я этого она ис!10льзует !1ередаи!тое eii в качестве пара.метра !!.мя столб!1а !! доба!!;1яет его к по.тпотекстово.му !!11лексу Ta6.i!i!J.i)i при помощи sp fulltext column. Так!1,м образо.м серверу с()об!цается. что !1еобходпмо iiocT])oiirb индекс д.тя pacu!!!pen!!oio поиска !!о указанному столб!!у, но !!е акт![1И1руется !!!!де1<;с !! !ie на1!о:н1яется даинь!.\!1г. Эго происходит да.тее.

Пр0![едура завершается вь!30!Ю.\! sp fulltext table i! sp fulltext catalog л.тя аюива-!ни! нового ио;!нотекстово!4) индекса !i ,за!!0Л!1е!Н1Я его ла1!1!ы\!1!. Посте toio как этот процесс aaBcpiiic!!, мож!!о 1!СГ!ользоват1. иол1!Огексто!и>!С предикаты и (Jatik-ци!!, возвраща10Щ1!е наборь! да!н!ь!х в ва!ие,м коде.

Полнотекстовые предикаты

11ред1!кат ~ это лог1!ческая ко!тстру!СЦ!!я, в()звра!цак)щая Истм!ну или Ме-Истн-ну (я 1!збега!о !!С110льзопания стова Ложь из-за проб.те.м с трехуров!тС1К)11 ло-!TiKO! i). в SQL 0!!!т обычно !1л!010т в1!д фу1!К!Н!1! !! рдспола! аются В опсраторс WHERE. Прн.\!ерами пред!!катоп для WHERE я1!ЛЯ10тся LIKE !! EXISTS.

Ко! да !К)лногекстовое индексирование пкл!оче1!о, в T!a!Ksact-SQL досту1!ны е!це два предиката: CONTAINS() и FREETEXT(). CONTAINS() н1)елоставляет поддержку точных и !!еточ1н>1Х cooTBeTCTB!!ii, п(н)ска близко рас!!оложе1!ных сло!!. мор-фолоп!чес!<;о!0 !!оиска и пзвеше1!ного поиска. FREETEXT(), наоборот, применяется д.тя 1!01!ска слов ил!! фрю с те.\! же са.мы.м ochobhiim :5иачением, что i! в \сло1П1-ях поиска.

Прежде чел! начать !!сследовать эт!1 ([)y!iKiHni в коле, давагге вкл10Ч1!.м 1!0Л-нотекстов!)!!! поиск на табл!1це Employees баз!л да1!нь!х Northwind. Эта таб:!1!ца со-держ!!т текстовое !!0ле Notes, идеальное для полнотекстового поиска. 1\[ож!1о пр!г,\!ен!!ть только что созда!!ну10 процедуру sp enabie fulltext для oroii 1гелн:

EXEC Northwind.,sp enaD;e ful1 text Tmployees,notes

Это должно создстть необходимые метала!!нь!е !! п!!декспу!о !н!фор.\!а!и!;о для того, чтобы фу!!К1П!!! Г!ол!!Отекстово!-о п01!ска работал!! правильно.

Предикат CONTAINS()

CONTAINSO 1!щет зап!!си, содержа!Цие слово нл!! слова !!Л!! их варна!И!И. Он .может искать слова точно и неточно, искать б.-нгзко расположен!!ь!е слова, вь!пол-!!ять .морфологически!! по!!ск. Эту функ1Н!!о .можно рассматрнвать как 1!редт!кат LIKE на стероидах. Вот прн.\!ер, !1спользу!ощ1н' ! CONTAINS() для т'ого, чтобы nail-ти все за!!иси в табл!1це Employees, у Koropinx в сто.тбце Notes содерж1!тся слово English :



Полнотекстовые предикаты 487

FROM Empicyees

.vHERE CC!-;TA!NS(Not9S,Ergl isn ; (результаты сокраиьепы)

Las:\ame Ei-siNaine Nocfs

Peacock Mar-gacet Margaei -о'сь a EA ir Епдмьг hreraure f-orn Docswo-tr. Anne Anne has a EA cegree in Engiisn fnon 5:.

King Rooent .. .coTpletirg rrs cegree in English

Обратите внимание, что, так как .\н.г hihcm ио все.м столбцам полнотекстового индекса таблицы Employees (столбец один в данном случае), вместо имени столбца .можно было бы указать * и получить тот же ]зезу;П)Тат:

SELECT LastName, FirstName. Notes

гром Employees

IsHERE C0NTAINS(*. Englisn)

CONTAINSO поддерживает также поиск близко расположенных слов. Вот улучшенный послед1иий при.мер, сужаюиипТ сгнюок работников, отоб1)ажаю1Цип только тех 113 них, у которых в столбце Notes соде]зжптся слово degree рядо.м со словом Engli.sh>:

SELECT LastName. FirstName, Notes FROM Employees

WHERE CONTAINS,degree NEAR English) (результаты с()К])ашеиы)

LastName FirstName Nctes

Dodsworth Anne Anne has a BA degree m English f.-om St,

King Robert .completing his degree in Engish

В этот раз в результате содержатся всего две заниси,.поскольку столбец Notes у Margaret Peacock но соде]Зжит слова dogroe . Обратите вни.\1ан1ш, что си.\нюл тильды ( ~ ) является cjhiohhmo.m NEAR, так что можно переппсать продыду-шн!! запрос так:

SEltCl lastName. FirstNam.e, Notes FROM Employees

WHERE C0N1AINS(*,degree - English)

Строка с условием поиска также поддерживает булевы выражения и rjiynno-вые символы. Вот некоторые ири.меры:

SEcECT LastName. FirstName. Notes FROM Employees

WHERE CO.NTAINS(Notes,English OR German) (результаты сокрашеиы)

LastName FirstName Notes

PeacocK Margaret Margaret nolos a EA in English literature from

Dodsworti! Anne Anne has a BA cegree in English fnom St,

Fuller Andrew .and neads German

King Rooent ., .completing his degree in Engl isi



Leverl:ng Janet . .сквр-eted a certificate program in food

Oavolio Nancy . She olso completed The Art of the Cold

.<ing Robert .. tompetng his degree in English at the

Buchanan Steven ...*5S completed the courses

Callahar Laura .. .ccri:jletea a course тп business French,

.JioT .(ап)сд- i!i),iii]);uiuui C!;..;(.-]);K;i]iuit с.тоиа Eng!i.sli>> и <<German>,

Точные л от поен тс.тьиые ни.иг.кенпя этих с;юв ие важны если хотя бы одно и них Haiueiio в сго.тбке Notes, .-iuiuub иоиа.част в резу.тьтнрующин набор.

В этом с.ч\час CONTAINSO ведет себя по.чооно LIKE, но есть одно важное раз .тнчие: CONTAINSO чувсгв!!те.icn к грат1Т[а,м с.тов, а LIKE - неч', Напрн,мер, во нерепнсанньп ( д.тя LIKE ,а,чр()г:

FROM L;poye-s

(VHlRl iJctib LIFE i?? T:;£F

CR Notes lIKE Яе:лггГ

Он выглядит похоже, но isanpor и(. такой же, как в случае CONTAINS(). Он пай дет соответствия с вариацпя.чпг пстчЧ).\п>1х слон п даже слова, которые содержа' ncKo.\H)ie, например <>Gernianlo\\n*, vEngli.shnian , Germanic , Bnrgerman>. За нрос с CONTAINSO, на()б()))ит, у,\1еет раз,п1чать слова - ему известна разница ме жду слова\и1 Eng!is!i> и Engli:hman п он ве])ист только то, что просили,

CONTAINSO поддерживает также префиксные групповые с1ьмволы. К сожа.че нтио, они бо.тее походят па rciyimoiHiic сихнкхты операцнонной системы, нежелг па стандартные групповые си.\нзо:!ы SCL. Вот при.мер:

SEIECF LastName-. r-iV-.д'е. Nc.js

FROM E,Tiployees

WHERE COTЛ^S,;, psy* OK cc-n* . (результаты ClHtJXHHCHbl)

LastName fintUam .vot

Leverlr,c Janet Jc-ne a:, :- EE ce.j-frc in cnemistry from Boston

Davolio Nar;c/ tCiuCjC .i;- in:; gls a BA 1n psycnology from

Callahan Еа: гс Lasra recevec a BA in psychology froin the

Этот запрос В1лбп[)аег все записи, содержащие в сго.пбце Notes с.това, иачииаю-UHiecH на <psy н.,П1 сЬст*. Обрат[пе внп.машю, что су(})фпксныс и односнм-во.тьные групповьн' сн.мво.п)! пе псл'ысрживаюгся.

Кавычки внутри строки условия служат для разделения строк поиска. Ко1да в ст])оке поиска исп()ль:зу101ся грушювые сплпюлы и несколько условий кавычки необходнмьк иначе запрос приведет к ошибке.

Сильная сторона нредпкага CONTAINSO в гом, что он поддерживает морфологический 1101н:к, Воз.можносгв искать па основе словофор.м сильна и часто является очень иолезны.м лонолиеппе.м к набору Transact-SQL. Вот пример, иллюсг-рирующ1п1, как искать фор.чн.! слова:

SELEcl LastNaiTie, FirstNa-t, Note;, FROM Empoyees

WHERE СааЧли*. TOR-SSDi-t.f i.i..riOI<AL .cwplete)) (ре.зультаг1>1 сокращены)

LastName FirstName Notes



1 ... 44 45 46 47 48 49 50 ... 55
© 2004-2024 AVTK.RU. Поддержка сайта: +7 495 7950139 в тональном режиме 271761
Копирование материалов разрешено при условии активной ссылки.
Яндекс.Метрика