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

Откуда:
Сообщений: 42
Добрый день!
Подскажите, куда копать?
Хочу написать хранимую функцию или что-то в этом роде, которая будет принимать несколько входящих параметров (например, несколько VARCHAR), и возвращать, допустим тоже VARCHAR (или sql_variant)
Но внутри, в коде функции необходимо использовать динамический sql (что-то вроде EXEC 'select fld from table')

Использовать написанную ХФ хотелось бы следующим образом:
select fld1, fld2, MyFunction(fld3, fld4) from table1
11 сен 14, 15:28    [16564387]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
bayazet,

есть же ограничения на T-SQL UDF - динамические запросы и побочные эффекты недопустимы.
11 сен 14, 15:35    [16564445]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
bayazet
Member

Откуда:
Сообщений: 42
да, я это понимаю, поэтому и спрашиваю, какие могут быть варианты? мб пользовательские агрегаты или что-то в этом роде?
11 сен 14, 15:47    [16564576]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
Вы лучше скажите для чего вам там DSQL понадобился.
11 сен 14, 16:09    [16564718]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
А почему непременно функцию ? Вы уверены, что ХП не подходит ?
11 сен 14, 17:11    [16565179]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
Maxx_UA
Guest
LSV
А почему непременно функцию ? Вы уверены, что ХП не подходит ?


select fld1, fld2, MyFunction(fld3, fld4) from table1
nope :)
11 сен 14, 17:17    [16565219]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
Wlr-l
Member

Откуда:
Сообщений: 522
Maxx_UA,

Это единственный способ получить нужный результат?
11 сен 14, 17:20    [16565233]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
bayazet
Member

Откуда:
Сообщений: 42
без DSQL не обойтись
в данном случае передаваться параметром в ХФ именно название таблицы, из которой надо будет взять какое-нибудь значение
11 сен 14, 18:11    [16565494]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
bayazet
без DSQL не обойтись

Это вы так решили или вам кто-то сказал ?
11 сен 14, 18:12    [16565500]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
bayazet
Member

Откуда:
Сообщений: 42
Wlr-l
Maxx_UA,

Это единственный способ получить нужный результат?

еще можно забомбить большой DSQL, который будет джойнить таблицы, инсертить это все во временную таблицу. и так для каждого кортежа исходного запроса
11 сен 14, 18:14    [16565507]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
bayazet
Member

Откуда:
Сообщений: 42
Glory
bayazet
без DSQL не обойтись

Это вы так решили или вам кто-то сказал ?

подскажите более лучший вариант джойнить таблицы, имена которых можно извлечь только запросом
например, Лог Изменений:
"Дата""Транзакция""Где поменяли""Старое значение""Новое значение"
11.09.2014 eargergrg Справочник1 Пупкин Сумкин
10.09.2014 sdfgsdfgs Справочник2 Москва СПб

И вот к такому запросу нужно прикрутить еще какие-нибудь данные из Справочник1 и Справочник2
11 сен 14, 18:22    [16565528]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
bayazet
подскажите более лучший вариант джойнить таблицы, имена которых можно извлечь только запросом

И кто придумал такую схему данных ?

join Справочник1 on Справочник1.id = ЛогИзменений.id and "Где поменяли" = 'Справочник1'
join Справочник2 on Справочник2.id = ЛогИзменений.id and "Где поменяли" = 'Справочник2'
11 сен 14, 18:32    [16565556]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
Кот Матроскин
Member

Откуда: Москва
Сообщений: 8933
bayazet
Glory
пропущено...

Это вы так решили или вам кто-то сказал ?

подскажите более лучший вариант джойнить таблицы, имена которых можно извлечь только запросом


примерно так

select ...
from [Лог Изменений] l
left join [Справочник1] с1
on [Где поменяли] = 'Справочник1' and...

left join [Справочник2] с2
on [Где поменяли] = 'Справочник2' and...


Не очень производительно и не очень изящно, ну так и сама схема, эээ,...
11 сен 14, 18:33    [16565558]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
bayazet
Member

Откуда:
Сообщений: 42
Glory,
его зовут 1С. И то, что я сейчас описываю - слегка упрощенная схема хранения данных

а если справочников 5? все 5 прописать? а если 10? 20?
11 сен 14, 18:35    [16565569]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
bayazet
а если справочников 5? все 5 прописать? а если 10? 20?

Даже если 100, то придется все прописать
11 сен 14, 18:37    [16565582]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
bayazet
Glory,
его зовут 1С. И то, что я сейчас описываю - слегка упрощенная схема хранения данных

а если справочников 5? все 5 прописать? а если 10? 20?

можно же написать скрипт, который будет генерировать сами эти запросы
11 сен 14, 18:46    [16565612]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
bayazet
Member

Откуда:
Сообщений: 42
Shakill
bayazet
Glory,
его зовут 1С. И то, что я сейчас описываю - слегка упрощенная схема хранения данных

а если справочников 5? все 5 прописать? а если 10? 20?

можно же написать скрипт, который будет генерировать сами эти запросы


вооот. и я об этом, генерировать D-SQL
только получается, что задача-то типовая, подобные связи в 1С сплошь и рядом, хотелось бы иметь некий метод, в который можно было бы передавать входящим параметром имя таблицы, имя поля в этой таблице, значение которого хочется получить, еще какие-то параметры, а на выходе получать значение VARCHAR или SQL_VARIANT
12 сен 14, 10:05    [16566921]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
iap
Member

Откуда: Москва
Сообщений: 47001
bayazet,

в 1С - эталон запросов на SQL. Это точно!
12 сен 14, 10:07    [16566924]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
bayazet
только получается, что задача-то типовая, подобные связи в 1С сплошь и рядом, хотелось бы иметь некий метод, в который можно было бы передавать входящим параметром имя таблицы, имя поля в этой таблице, значение которого хочется получить, еще какие-то параметры, а на выходе получать значение VARCHAR или SQL_VARIANT

Ага, универсальная функция под все запросы ?

Напишите процедуру.
Что вас _обязывает_ писать функцию ?
12 сен 14, 10:09    [16566934]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
bayazet
Member

Откуда:
Сообщений: 42
Glory
Напишите процедуру.
Что вас _обязывает_ писать функцию ?

пока написана именно процедура, в ней запускается курсор по исходной таблице в котором формируются d-sql-запросы, результаты инсертятся во временную таблицу, а потом из этой временной таблицы и берется результирующий датасет

вот как раз и хотелось обойти это трудоемкое и немасштабируемое решение поимев некий метод, который можно было бы использовать как я описал в первом сообщении треда
12 сен 14, 15:00    [16568816]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
Jovanny
Member

Откуда:
Сообщений: 1195
bayazet,

Так и перепишите процедуру, зачем функция понадобилась?
12 сен 14, 15:05    [16568858]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
bayazet
Member

Откуда:
Сообщений: 42
Jovanny
bayazet,

Так и перепишите процедуру, зачем функция понадобилась?

наверное, я не понимаю, что вы имеете ввиду под "перепишите"
12 сен 14, 15:07    [16568872]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
Glory
Member

Откуда:
Сообщений: 104760
bayazet
наверное, я не понимаю, что вы имеете ввиду под "перепишите"

Чтобы она была менее трудоемкой и более масштабируемой
12 сен 14, 15:08    [16568881]     Ответить | Цитировать Сообщить модератору
 Re: Хранимая функция с динамическим sql-запросом  [new]
Jovanny
Member

Откуда:
Сообщений: 1195
bayazet
наверное, я не понимаю, что вы имеете ввиду под "перепишите"

Переделайте, сделайте рефакторинг, модифицируйте, измените текст. Не знаю, как понятнее выразиться.
12 сен 14, 15:15    [16568931]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить