Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / пользовательская функция / 11 сообщений из 11, страница 1 из 1
10.07.2002, 12:59:37
    #32035981
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательская функция
все привет. что-то я споткнулся на таких граблях.
хочу сделать функцию
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE FUNCTION fn(@AddCondition varchar( 8000 ))
RETURNS INT
AS
BEGIN
    DECLARE @SQL varchar( 8000 ), @CNT int
    SET @SQL = 'SELECT COUNT(*) FROM Tbl WHERE ' + @AddCondition
....
   RETURN @CNT
END

Вопрос! Как переменной @CNT получить значение COUNT(*). Или более общий вопрос, как получить назад параметры из запроса в текстовой строке?

Как мне кажется EXEC сюда не подходит, а sp_executesql вроде параметры принимает только внутрь.
...
Рейтинг: 0 / 0
10.07.2002, 13:11:04
    #32035986
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательская функция
Посмотри здесь.
...
Рейтинг: 0 / 0
10.07.2002, 13:23:46
    #32035994
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательская функция
большое спасибо... проблема были именно в возможности указать OUTPUT
...
Рейтинг: 0 / 0
10.07.2002, 14:11:52
    #32036008
ziktuw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательская функция
Не поможет. sp_executesql внутри функции запрещена, хотя и является extended. MS постарался, а предупредить об этом исключении из правила не удосужился.
...
Рейтинг: 0 / 0
10.07.2002, 15:19:20
    #32036034
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательская функция
хм... а тогда какие есть способы?
может сделать процедурой? правда тогда работать будет не так удобно...
...
Рейтинг: 0 / 0
10.07.2002, 15:58:16
    #32036043
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательская функция
Приведи весь запрос пожалуйста.
...
Рейтинг: 0 / 0
10.07.2002, 16:25:25
    #32036060
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательская функция
вот это хотелось бы обернуть в функцию, чтобы не лепить извращения.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
CREATE PROCEDURE func
    @Condition varchar( 8000 ),
    @Date datetime
RETURNS INT
BEGIN
DECLARE 
	@date_str varchar( 8000 ),
	@date_bom_str varchar( 8000 ),
	@result int

SET @date_str = CONVERT(varchar( 30 ), @date,  112 )

SET @date_bom_str = CONVERT(varchar( 30 ), DATEADD(day, -DATEPART(day, @date), @date),  112 )

DECLARE @SQL nvarchar( 4000 )
SET @SQL = 
N'
SELECT  @result = count(*)
FROM DD
INNER JOIN MD on DD.InstrumentID = MD.InstrumentID and MD.Date = '''+@date_str+'''
INNER JOIN BOM on DD.InstrumentID = BOM.InstrumentID and BOM.Date = '''+@date_bom_str+'''
WHERE
'

SET @SQL = @SQL + @Condition

EXEC sp_executesql @SQL, N'@result int output', @result = @result output

RETURN @result
END


запрос, в котором это требуется
Код: plaintext
1.
2.
SELECT ConditionID, FOUND = func(Condition, '2001-01-01')
FROM Conditions
...
Рейтинг: 0 / 0
10.07.2002, 16:53:23
    #32036066
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательская функция
Да уж, задачка. У меня с ходу ничего не придумывается. Когда-то уже что-то похожее в форуме было, но давно навеоное, найти не смог.

А сколько типов условий планируется хранить? Если пару десятков, то можно на каждое сделать по вьюхе и не мудрствуя лукаво спокойно жить. :)
...
Рейтинг: 0 / 0
10.07.2002, 17:06:43
    #32036069
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательская функция
там будет что-то типа
Price > 0.01 and Price < 1.1
или
FlagID in (........)
условия могут меняться в зависимости от предпочтений пользователя системы, который через интерфейс может формировать условия
...
Рейтинг: 0 / 0
10.07.2002, 17:20:21
    #32036073
VVG_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательская функция
Да, похоже без курсора не обойтись...

А обязательно надо count'ы пачками расчитывать?
Может как-нибудь поодиночке получится?
...
Рейтинг: 0 / 0
10.07.2002, 17:42:46
    #32036074
AAron
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
пользовательская функция
можно и через курсоры посчитать, тем более, что там можно и не использовать функцию, а считать через GROUP BY...

принципиально не хотелось делать курсоры, но кажется придется... :)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / пользовательская функция / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]