Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проблема с вызовом функций в sql-запросе  [new]
m_nikolay
Member

Откуда:
Сообщений: 7
Добрый день.

Необходимо написать запрос возвращающий набор ID записей текст которых удовлетворяет шаблону:

select id... from tbl1 where contains(col1, '"шаблон*"')

Этот sql-запрос (строка) в программе оборачивается другим, который, используя join и т.п., выдает читабельный набор данных.

select ... from ([искомый sql-запрос]) ...

Проблема состоит в том, что шаблон должен быть откорректирован под full-text search т.е. % -> * + расставить ".

Шаблон "помещается" в запрос перед выполнением т.е. (C#: dbCommand.Text = string.format(..., 'шаблон%')

Пробовал:
1) - ошибка при подстановке в запрос-обертку
Declare @Template nchar(...);
set @Template = 'шаблон%';

set @Template = Replace(...)
[...]
Select ...
where contains(col1, @Template)

1,5) - аналогично
exec (' см. п.1 ')

2) - в contains вызов функций недопустим :(
Select ...
where contains(col1, fn_CorrectTemplate('шаблон'))

Pls помогите :'(
7 июл 05, 00:26    [1682342]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с вызовом функций в sql-запросе  [new]
Breakneck
Member

Откуда: Kiev
Сообщений: 2454
Ну а текст ошибки не хотите привести?
7 июл 05, 10:21    [1682829]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с вызовом функций в sql-запросе  [new]
m_nikolay
Member

Откуда:
Сообщений: 7
Версия:

Microsoft SQL Server 2000 - 8.00.760 (Intel X86)
Dec 17 2002 14:22:05
Copyright (c) 1988-2003 Microsoft Corporation
Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 1)

Таблица:
CREATE TABLE tblA (
	IDFILE	integer NOT NULL CONSTRAINT PK_IDFILE PRIMARY KEY (IDFILE),
	TXT	ntext
);

Запросы:
1)
SELECT * FROM(
DECLARE @Template nchar(254);
SET @Template =  (SELECT dbo.CorrectTemplate('москв%'));

SELECT	TOP 1 IDFILE
FROM    tblA
WHERE   CONTAINS(TXT, @Template);
);

Incorrect syntax near the keyword 'DECLARE'.
Line 8: Incorrect syntax near ')'.
2)
SELECT * FROM (
EXEC ('
DECLARE @Template nchar(254);
SET @Template =  (SELECT dbo.CorrectTemplate(''москв%''));

SELECT	TOP 1 IDFILE
FROM    tblA
WHERE   CONTAINS(TXT, @Template);
'));

Incorrect syntax near the keyword 'EXEC'.
Line 10: Incorrect syntax near ')'.

3)
SELECT	TOP 1 IDFILE
FROM    tblA
WHERE   CONTAINS(TXT, (dbo.CorrectTemplate('москв%')) );

Line 3: Incorrect syntax near '('.
7 июл 05, 11:34    [1683235]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с вызовом функций в sql-запросе  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
DECLARE @Template nchar(254);
SET @Template =  (SELECT dbo.CorrectTemplate('москв%'));

SELECT * FROM(
SELECT	TOP 1 IDFILE
FROM    tblA
WHERE   CONTAINS(TXT, @Template);
);
????
7 июл 05, 11:36    [1683245]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с вызовом функций в sql-запросе  [new]
m_nikolay
Member

Откуда:
Сообщений: 7
я

...
Этот sql-запрос (строка) в программе оборачивается другим, который, используя join и т.п., выдает читабельный набор данных.

select ... from ([искомый sql-запрос]) ...
...


т.о. вынести declare и т.п. за границы поздапроса увы, нельзя :(
7 июл 05, 11:45    [1683304]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с вызовом функций в sql-запросе  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
m_nikolay
я

...
Этот sql-запрос (строка) в программе оборачивается другим, который, используя join и т.п., выдает читабельный набор данных.

select ... from ([искомый sql-запрос]) ...
...


т.о. вынести declare и т.п. за границы поздапроса увы, нельзя :(

Это почему же?
7 июл 05, 11:47    [1683316]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с вызовом функций в sql-запросе  [new]
m_nikolay
Member

Откуда:
Сообщений: 7
Гавриленко Сергей Алексеевич
Это почему же?


Функция, которую необходимо адаптировать под SQL Server, возвращает строку с sql [под]запросом. Менять механизм дальнейшей обработки запроса возможности нет.

т.е.

Функция генерации sql подзапроса (на выборку IDFILE)
|
string.Format(, шаблон) // подзапрос с шаблоном
|
string.Format(обертка, [подзапрос с шаблоном])
|
dbCommand.ExecureReader
7 июл 05, 11:59    [1683401]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с вызовом функций в sql-запросе  [new]
Glory
Member

Откуда:
Сообщений: 104760
2 m_nikolay
Создайте UDF, которая будет содержать

DECLARE @Template nchar(254);
SET @Template = (SELECT dbo.CorrectTemplate(''москв%''));

SELECT TOP 1 IDFILE
FROM tblA
WHERE CONTAINS(TXT, @Template)
7 июл 05, 12:02    [1683412]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с вызовом функций в sql-запросе  [new]
m_nikolay
Member

Откуда:
Сообщений: 7
2 Glory
Спасибо, помогло.

2 All
А возможно ли решение без UDF?
7 июл 05, 12:25    [1683549]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить