Zerowany @@ ROWCOUNT, lecz nie zwracają wartość do klient.
Instrukcje, które należy zawsze proste przypisania zestaw wartość @@ ROWCOUNT na 1.
W SQL Server, można użyć nazw four-part w CONTAINS lub FREETEXT predykaty pełnego tekstu do wykonywania kwerend względem serwerów połączonych.
Instrukcje te przykłady:
Wyraz lub wyrażenie.
Prefiks wyrazu lub wyrażenia.
Wyraz obok innego wyrazu.
Instrukcji języka (DML) manipulacji na danych zestaw ROWCOUNT @@ wartość liczby wierszy objętych kwerendą i zwraca ją do klient.
Instrukcje DML nie może wysłać wszystkie wiersze, do klient.
CONTAINS
( { column_name | ( column_list ) | * }
, '<contains_search_condition>'
[ , LANGUAGE language_term ]
)
<contains_search_condition> ::=
{ <simple_term>
| <prefix_term>
| <generation_term>
| <proximity_term>
| <weighted_term>
}
| { ( <contains_search_condition> )
[ { <AND> | <AND NOT> | <OR> } ]
<contains_search_condition> [ ...n ]
}
<simple_term> ::=
word | "phrase"
<prefix term> ::=
{ "word *" | "phrase *" }
<generation_term> ::=
FORMSOF ( { INFLECTIONAL | THESAURUS } , <simple_term> [ ,...n ] )
<proximity_term> ::=
{ <simple_term> | <prefix_term> }
{ { NEAR | ~ }
{ <simple_term> | <prefix_term> }
} [ ...n ]
<weighted_term> ::=
ISABOUT
( { {
<simple_term>
| <prefix_term>
| <generation_term>
| <proximity_term>
}
[ WEIGHT ( weight_value ) ]
} [ ,...n ]
)
<AND> ::=
{ AND | & }
<AND NOT> ::=
{ AND NOT | &! }
<OR> ::=
{ OR | | }
Argumenty
column_name
DECLARE kursor oraz pobierania wartość @@ ROWCOUNT na 1.Kolumny może być typu char, varchar, nchar, nvarchar, text, ntext, image, xml, varbinary, lub varbinary(max).column_list
Specifies two or more columns, separated by commas.column_list must be enclosed in parentheses.Chyba że language_term jest określony język wszystkie kolumny column_list musi być taka sama.*
Wskazuje, że zapytanie ma przeszukiwać wszystkie kolumny o indeksach pełnotekstowych należące do tabeli określonej w klauzuli FROM dla podanego warunku wyszukiwania.Kolumny wymienione w klauzuli CONTAINS muszą pochodzić z jednej tabeli zaindeksowanej indeksami pełnotekstowymi.Język wszystkich kolumn w tabeli musi być taki sam, chyba że określono parametr language_term.LANGUAGE language_term
Język, który będzie używany do dzielenia wyrazów, ustalania rdzeni wyrazów, rozszerzania tezaurusa i zastępowania wpisanych w nim wyrazów oraz usuwania wyrazów ignorowanych podczas wykonywania zapytania.Ten parametr jest opcjonalny.Jeśli w jednej kolumnie są przechowywane razem dokumenty w różnych językach jako duże obiekty binarne (BLOB), o wyborze języka indeksowania treści dokumentu decyduje jego identyfikator ustawień regionalnych (LCID).Podczas wykonywania zapytania w takiej kolumnie skonfigurowanie opcji LANGUAGE language_term może zwiększyć prawdopodobieństwo trafnego dopasowania.
Wartość parametru language_term może być ciągiem tekstowym, liczbą całkowitą lub liczbą szesnastkową odpowiadającą identyfikatorowi LCID języka.Jeśli parametr language_term jest zdefiniowany, odpowiadający mu język będzie stosowany do wszystkich elementów warunku wyszukiwania.W przeciwnym razie jest używany język pełnotekstowego indeksu kolumny.
Jeśli określona jako ciąg znaków, language_term odpowiada alias wartość kolumna on sys.syslanguages (Transact-SQL) Widok zgodności. Ciąg musi być ujęty w pojedynczy cudzysłów, tak jak "language_term". Po określeniu jako liczbę całkowitą z zakresu language_term to rzeczywiste LCID identyfikujący języka. Gdy określany jako wartość szesnastkowa language_term 0 x następuje szesnastkowej wartości LCID. Wartość szesnastkowa nie może przekraczać ośmiu cyfr, łącznie z zerami na początku.
Jeśli wartość jest w formacie znaków zestaw zestaw znaków dwubajtowych (zestaw znaków dwubajtowych) w zestawie SQL Server przekonwertuje go na standard Unicode.
Jeśli określony język nie jest prawidłowy lub nie istnieje żadne zasoby nie zainstalowano odpowiadające dla danego języka SQL Server Zwraca błąd. Aby można było korzystać z zasobów języków neutralnych, określić 0x0 jako language_term.
<contains_search_condition>
Kiedy column_name ma wartość NULL, nazwę arkusza, który nie ulega zmianie.<contains_search_condition> jest nvarchar. Niejawna konwersja występuje wówczas, gdy inny typ danych znak jest używany jako dane wejściowe.W poniższym przykładzie @SearchWord Zmienna, która jest zdefiniowana jako varchar(30), powoduje, że niejawna konwersja w CONTAINS predykat.
USE AdventureWorks; GO DECLARE @SearchWord varchar(30) SET @SearchWord ='performance' SELECT Description FROM Production.ProductDescription WHERE CONTAINS(Description, @SearchWord);
Ponieważ "Wykrywanie parametrów" nie jest dostępna na konwersji, należy użyć nvarchar Aby zapewnić lepszą wydajność. W poniższym przykładzie zadeklarować @SearchWord jako nvarchar(30).
USE AdventureWorks; GO DECLARE @SearchWord nvarchar(30) SET @SearchWord = N'performance' SELECT Description FROM Production.ProductDescription WHERE CONTAINS(Description, @SearchWord);
W przypadkach, gdy jest generowany nieoptymalny plan, można również użyć wskazówki zapytań OPTIMIZE FOR.
word
Ciąg znaków bez żadnych spacji ani znaków przestankowych.phrase
Jeden lub więcej wyrazów rozdzielonych spacjami.Uwaga
W niektórych językach, na przykład azjatyckich, istnieją wyrażenia składające się z kilku wyrazów nierozdzielonych spacjami.
<prosty_termin>
Interpunkcja jest ignorowana.W związku z tym predykat CONTAINS(testing, "computer failure") spowodowałby np. zwrócenie wiersza zawierającego wartość "Gdzie jest mój komputer?Jeśli go nie znajdę, mamy stan awarii." Aby uzyskać więcej informacji na temat działania funkcji dzielenia wyrazów, zobacz Program Word podziały i Stemmers.<termin_prefiksowy>
Zgodność z wyrazami lub wyrażeniami rozpoczynającymi się określonym fragmentem tekstu.Termin prefiksowy należy ująć w podwójny cudzysłów (""), a przed końcowym znakiem zapytania należy wstawić gwiazdkę (*). W ten sposób porównywanie będzie dokonywane z całym tekstem rozpoczynającym się terminem prostym (umieszczonym przed gwiazdką).Klauzula powinna wyglądać następująco: CONTAINS (column, '"text*"').Gwiazdka może oznaczać zgodność z dowolną liczbą znaków (rdzenia wyrazu albo wyrazów w wyrażeniu), w tym brak zgodności z jakimkolwiek znakiem.Jeśli termin i gwiazdka nie zostaną ujęte w podwójny cudzysłów, w związku z czym predykat odczytuje składnię w postaci CONTAINS (column, 'text*'), wyszukiwanie pełnotekstowe traktuje gwiazdkę jako znaczący znak i szuka wyników pasujących do wyrażenia text*.Aparat wyszukiwania pełnotekstowego nie znajdzie wyrazów zawierających znak gwiazdki (*), ponieważ narzędzia dzielenia wyrazów zazwyczaj ignorują tego typu znaki.Kiedy <prefix_term> to wyrażenie, każdego słowa zawarte we frazie jest traktowana jako oddzielne prefiksu. Identyfikator tabela, która ma dziennika zmian.
<W tabela może mieć dziennik zmian, nawet jeśli śledzenie zmian jest obecnie wyłączona.>
Identyfikator tabela jest unikatowa w bazie danych.is_track_columns_updated_on
Bieżący stan zmian w tabela:begin_versionWersja bazy danych, gdy w chwili rozpoczęcia śledzenia zmian w tabela.Ta wersja jest zazwyczaj wskazuje, kiedy zostało włączone śledzenie zmian, ale wartość ta jest resetowane po tabela zostanie obcięta do liczby całkowitej.Jeśli language_term jest określony, program szukający rdzeni, odpowiadające używany jest język.Biorąc pod uwagę A <simple_term> w ramach <generation_term> nie będzie pasował zarówno rzeczowniki i zlecenia.
min_valid_version
Minimalna wersja ważne informacje, które są dostępne w tabela śledzenia zmian.Najdłuższy deseń lub desenie z <simple_term> są dopasowywane do tezaurusa i generowane są dodatkowe warunki, aby rozwinąć lub zamienić oryginalny wzorzec. Jeśli nie zostanie znaleziony odpowiednik dla całości lub części <simple_term>, część bez dopasowywania jest traktowany jako simple_term. Aby uzyskać więcej informacji na temat tezaurusa przeszukiwanie pełnego tekstu Zobacz Konfiguracja tezaurusa.<odziedziczone sys.columns kolumn>
seed_valuePodobnie jak AND operator <proximity_term> wymaga oba warunki wyszukiwania w dokumencie są przeszukiwane.Typu danych wartość początkową jest taka sama, jak typ danych kolumna samego siebie.
increment_valueKilka warunków bliskości może być powiązane, jak w a NEAR b NEAR c lub a ~ b ~ c. last_valueOstatnia wartość wygenerowana dla tej kolumna tożsamości.kolumna tożsamości jest zadeklarowany jako nie dla replikacja.Gdy spełnione są warunki wyszukiwania >warunki 50, pozycja zwrócone na dokumencie jest 0.
Na przykład CONTAINS)nazwa_kolumny, 'fox NEAR kurczaka') i ( CONTAINSTABLEnazwa_tabeli, nazwa_kolumny, „ lis ~ kurczaka „) obu zwróci wszystkie dokumenty w określonej kolumnie zawierających zarówno "lis" i "kurczaka".Wyświetla wyrażeń warunków, które zostały wykonane, tarcze wyrażeń, wynik każdej realizacji i szczegółowe informacje o błędach, jeśli wystąpił.W poniższej tabela opisano kolumny w widoku syspolicy_execution_history_details.
detail_idIdentyfikator ten rekord.Każdy rekord reprezentuje próby oceny lub wymusić jedno wyrażenie warunku w zasadach.
<Stosowane do wielu celów, każdy z nich będzie miał rekord szczegółów dla każdego miejsce docelowe.>
history_idIdentyfikator zdarzenie historia.
Określa <weighted_term> słowo kluczowe.Ponieważ warunek może mieć wiele wyrażeń warunków i kilka elementów docelowych, a history_id można utworzyć kilka rekordów szczegółowych.weight_value
Określa wagę. Jest to liczba z zakresu od 0,0 do 1,0.Każdy składnik parametru <weighted_term> może zawierać parametr weight_value.Parametr weight_value pozwala modyfikować wpływ różnych części zapytania na wartość rankingową przypisywaną różnym wierszom pasującym do zapytania.Opcja WEIGHT nie wpływa na wyniki zapytań CONTAINS, ale ma wpływ na ranking w zapytaniach CONTAINSTABLE.Uwaga
execution_date
{ AND | & } | { AND NOT | &! } | { OR | | }
0 (sukces) lub 1 (brak).result_detail&
Wynik komunikatu.(Symbol handlowego "i"&) mogą być używane zamiast słowa kluczowego AND do reprezentowania operator AND.exception_message&
Wystąpił generuje wyjątek, jeśli jeden komunikat.Handlowe i, po której następuje wykrzyknik (symbol&!) mogą być używane zamiast słowa kluczowego i nie do reprezentowania operator I NOT.Podczas rozwiązywania problemów z oparte na zasadach zarządzania kwerendy syspolicy_policy_execution_history_details widoku zadań umożliwia ustalenie kombinacje wyrażenie warunku i docelowe nie powiodło się, gdy one nie powiodło się i przejrzyj pokrewne błędy.
Wskazuje, że w celu uznania elementu za pasujący musi być spełniony co najmniej jeden warunków wyszukiwania predykatu CONTAINS.Operator OR może być reprezentowany symbolem słupka (|) zamiast słowem kluczowym OR.Jeśli parametr <contains_search_condition> zawiera grupy ujęte w nawiasy, najpierw są badane te grupy.Po zbadaniu grup ujętych w nawiasy obowiązują następujące reguły dotyczące używania operatorów logicznych w warunkach wyszukiwania predykatu CONTAINS:
Zmienia właściwości typ komunikatu.
Operator NOT może występować wyłącznie po operatorze AND (AND NOT).Operator OR NOT jest niedozwolony.Operator NOT nie może występować przed pierwszym terminem.Na przykład klauzula CONTAINS (mycolumn, 'NOT "phrase_to_search_for" ' ) jest nieprawidłowa.
Treść wiadomości może zawierać żadnych danych lub może mieć wartości NULL.
Treść wiadomości musi mieć wartość NULL.
- n
WELL_FORMED_XML
Remarks
Predykaty pełnego tekstu, a funkcje pracy na pojedynczej tabela, która jest podany w predykacie FROM.Aby wyszukać wielu tabel, należy użyć sprzężonej tabela w klauzula FROM do wyszukiwania zestaw wyników, który to iloczyn dwóch lub większej liczby tabel.
Treść wiadomości może zawierać poprawnie sformułowany kod XML.Aby uzyskać więcej informacji zobaczsp_dbcmptlevel (języka Transact-SQL).
Predykaty pełnego tekstu nie są dozwolone w Klauzula wyjście wówczas, gdy poziom zgodności bazy danych jest równa 100.
Porównanie predykatu LIKE z wyszukiwaniem pełnotekstowym
W przeciwieństwie do wyszukiwania pełnotekstowego predykat LIKE języka Transact-SQL działa tylko z wzorcami znaków.Ponadto za pomocą predykatu LIKE nie można wykonywać zapytań w sformatowanych danych binarnych.Co więcej, wykonanie zapytania LIKE na dużej ilości danych tekstowych, które nie mają struktury, trwa o wiele dłużej niż wykonanie na tych danych wyszukiwania pełnotekstowego odpowiadającego zapytaniu.Wykonanie zapytania LIKE w przypadku milionów wierszy danych tekstowych może trwać kilka minut, podczas gdy wyszukiwanie pełnotekstowe w tych samych danych może trwać kilka sekund lub krócej, w zależności od liczby zwracanych wierszy.
Przykłady
A.Używanie predykatu CONTAINS z <prostym_terminem>
W poniższym przykładzie wyszukuje wszystkie produkty z cena $80.99 zawierają wyraz "Mountain".
USE AdventureWorks;
GO
SELECT Name, ListPrice
FROM Production.Product
WHERE ListPrice = 80.99
AND CONTAINS(Name, 'Mountain');
GO
B.W poniższym przykładzie zmienia typ komunikatu < wymaganie, że treść wiadomości zawiera poprawnie sformułowany dokument XML. >
W poniższym przykładzie są zwracane wszystkie produkty, zawierające frazę albo "Mountain" lub "Road".
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Mountain" OR "Road" ')
GO
C.Za pomocą CONTAINS z <prefix_term>
W poniższym przykładzie są zwracane wszystkie nazwy produktów z co najmniej jeden wyraz, zaczynając od prefiksu łańcucha w Name Kolumna.
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, ' "Chain*" ');
GO
D.Za pomocą CONTAINS i lub z <prefix_term>
W poniższym przykładzie zwraca wszystkie opisy kategorii zawierających ciągi zawierające prefiksy: "chain" lub "full".
USE AdventureWorks;
GO
SELECT Name
FROM Production.Product
WHERE CONTAINS(Name, '"chain*" OR "full*"');
GO
E.Za pomocą CONTAINS z <proximity_term>
W poniższym przykładzie są zwracane wszystkie nazwy produktów, które zawierają to słowo bike blisko wyrazu performance.
USE AdventureWorks;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, 'bike NEAR performance');
GO
F.Używanie predykatu CONTAINS z <generowanym_terminem>
W przykładzie poniżej nastąpi odszukanie wszystkich produktów zawierających wyrazy będące odmianami wyrazu ride: riding, ridden itd.
USE AdventureWorks;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, ' FORMSOF (INFLECTIONAL, ride) ');
GO
G.Za pomocą CONTAINS z <weighted_term>
Następujący przykład wyszukuje wszystkie nazwy produktów, zawierające słowa performance, comfortable, lub smooth, i podano różnych wag do każdego wyrazu.
USE AdventureWorks;
GO
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, 'ISABOUT (performance weight (.8),
comfortable weight (.4), smooth weight (.2) )' );
GO
H.Używanie predykatu CONTAINS ze zmiennymi
W poniższym przykładzie użyto zmiennej zamiast określonego szukanego terminu.
USE AdventureWorks;
GO
DECLARE @SearchWord nvarchar(30)
SET @SearchWord = N'Performance'
SELECT Description
FROM Production.ProductDescription
WHERE CONTAINS(Description, @SearchWord);
GO
I.Używanie predykatu CONTAINS z operatorem logicznym (AND)
W poniższym przykładzie jest używana tabela ProductDescription z bazy danych AdventureWorks.W zapytaniu predykat CONTAINS służy do znalezienia opisów, w których wartość identyfikatora nie jest równa 5 i które zawierają zarówno wyraz „Aluminum”, jak i wyraz „spindle”. W warunku wyszukiwania użyto operatora logicznego AND.
USE AdventureWorks;
GO
SELECT Description
FROM Production.ProductDescription
WHERE ProductDescriptionID <> 5 AND
CONTAINS(Description, ' Aluminum AND spindle');
GO
J.Sprawdzanie wstawienia wiersza za pomocą predykatu CONTAINS
W przykładzie poniżej użyto predykatu CONTAINS w podzapytaniu SELECT.Zapytanie wykonywane w bazie danych AdventureWorks zwraca treść wszystkich komentarzy dotyczących wybranego cyklu zapisanych w tabeli ProductReview.W warunku wyszukiwania jest używany operator logiczny AND.
USE AdventureWorks;
GO
INSERT INTO Production.ProductReview
(ProductID, ReviewerName, EmailAddress, Rating, Comments)
VALUES
(780, 'John Smith', 'john@fourthcoffee.com', 5,
'The Mountain-200 Silver from AdventureWorks Cycles meets and exceeds expectations. I enjoyed the smooth ride down the roads of Redmond')
-- Given the full-text catalog for these tables is Adv_ft_ctlg,
-- with change_tracking on so that the full-text indexes are updated automatically.
WAITFOR DELAY '00:00:30'
-- Wait 30 seconds to make sure that the full-text index gets updated.
SELECT r.Comments, p.Name
FROM Production.ProductReview r
JOIN Production.Product p
ON
r.ProductID = p.ProductID
AND r.ProductID = (SELECT ProductID
FROM Production.ProductReview
WHERE CONTAINS (Comments,
' AdventureWorks AND
Redmond AND
"Mountain-200 Silver" '))
GO
Historia zmian
Microsoft Learning |
---|
Sprostowano opis parametru word. |
Poprawiono opis <proximity_term> parametr. |
Dodano porównanie oparte na operatorze LIKE do wyszukiwania pełnotekstowego w sekcji „Uwagi”. |
See Also