Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хранимая функция с динамическим sql-запросом / 24 сообщений из 24, страница 1 из 1
11.09.2014, 15:28
    #38744340
bayazet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
Добрый день!
Подскажите, куда копать?
Хочу написать хранимую функцию или что-то в этом роде, которая будет принимать несколько входящих параметров (например, несколько VARCHAR), и возвращать, допустим тоже VARCHAR (или sql_variant)
Но внутри, в коде функции необходимо использовать динамический sql (что-то вроде EXEC 'select fld from table')

Использовать написанную ХФ хотелось бы следующим образом:
select fld1, fld2, MyFunction(fld3, fld4) from table1
...
Рейтинг: 0 / 0
11.09.2014, 15:35
    #38744350
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
bayazet,

есть же ограничения на T-SQL UDF - динамические запросы и побочные эффекты недопустимы.
...
Рейтинг: 0 / 0
11.09.2014, 15:47
    #38744368
bayazet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
да, я это понимаю, поэтому и спрашиваю, какие могут быть варианты? мб пользовательские агрегаты или что-то в этом роде?
...
Рейтинг: 0 / 0
11.09.2014, 16:09
    #38744398
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
Вы лучше скажите для чего вам там DSQL понадобился.
...
Рейтинг: 0 / 0
11.09.2014, 17:11
    #38744494
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
А почему непременно функцию ? Вы уверены, что ХП не подходит ?
...
Рейтинг: 0 / 0
11.09.2014, 17:17
    #38744506
Maxx_UA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
LSVА почему непременно функцию ? Вы уверены, что ХП не подходит ?

select fld1, fld2, MyFunction(fld3, fld4) from table1
nope :)
...
Рейтинг: 0 / 0
11.09.2014, 17:20
    #38744510
Wlr-l
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
Maxx_UA,

Это единственный способ получить нужный результат?
...
Рейтинг: 0 / 0
11.09.2014, 18:11
    #38744576
bayazet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
без DSQL не обойтись
в данном случае передаваться параметром в ХФ именно название таблицы, из которой надо будет взять какое-нибудь значение
...
Рейтинг: 0 / 0
11.09.2014, 18:12
    #38744578
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
bayazetбез DSQL не обойтись
Это вы так решили или вам кто-то сказал ?
...
Рейтинг: 0 / 0
11.09.2014, 18:14
    #38744581
bayazet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
Wlr-lMaxx_UA,

Это единственный способ получить нужный результат?
еще можно забомбить большой DSQL, который будет джойнить таблицы, инсертить это все во временную таблицу. и так для каждого кортежа исходного запроса
...
Рейтинг: 0 / 0
11.09.2014, 18:22
    #38744590
bayazet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
Glorybayazetбез DSQL не обойтись
Это вы так решили или вам кто-то сказал ?
подскажите более лучший вариант джойнить таблицы, имена которых можно извлечь только запросом
например, Лог Изменений:
"Дата""Транзакция""Где поменяли""Старое значение""Новое значение"11.09.2014 eargergrg Справочник1 Пупкин Сумкин10.09.2014 sdfgsdfgs Справочник2 Москва СПб
И вот к такому запросу нужно прикрутить еще какие-нибудь данные из Справочник1 и Справочник2
...
Рейтинг: 0 / 0
11.09.2014, 18:32
    #38744602
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
bayazetподскажите более лучший вариант джойнить таблицы, имена которых можно извлечь только запросом
И кто придумал такую схему данных ?

join Справочник1 on Справочник1.id = ЛогИзменений.id and "Где поменяли" = 'Справочник1'
join Справочник2 on Справочник2.id = ЛогИзменений.id and "Где поменяли" = 'Справочник2'
...
Рейтинг: 0 / 0
11.09.2014, 18:33
    #38744603
Кот Матроскин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
bayazetGloryпропущено...

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


примерно так

Код: sql
1.
2.
3.
4.
5.
6.
7.
select ...
from [Лог Изменений] l
left join [Справочник1] с1
on [Где поменяли] = 'Справочник1' and...

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



Не очень производительно и не очень изящно, ну так и сама схема, эээ,...
...
Рейтинг: 0 / 0
11.09.2014, 18:35
    #38744607
bayazet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
Glory,
его зовут 1С. И то, что я сейчас описываю - слегка упрощенная схема хранения данных

а если справочников 5? все 5 прописать? а если 10? 20?
...
Рейтинг: 0 / 0
11.09.2014, 18:37
    #38744610
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
bayazetа если справочников 5? все 5 прописать? а если 10? 20?
Даже если 100, то придется все прописать
...
Рейтинг: 0 / 0
11.09.2014, 18:46
    #38744615
Shakill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
bayazetGlory,
его зовут 1С. И то, что я сейчас описываю - слегка упрощенная схема хранения данных

а если справочников 5? все 5 прописать? а если 10? 20?
можно же написать скрипт, который будет генерировать сами эти запросы
...
Рейтинг: 0 / 0
12.09.2014, 10:05
    #38744889
bayazet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
ShakillbayazetGlory,
его зовут 1С. И то, что я сейчас описываю - слегка упрощенная схема хранения данных

а если справочников 5? все 5 прописать? а если 10? 20?
можно же написать скрипт, который будет генерировать сами эти запросы

вооот. и я об этом, генерировать D-SQL
только получается, что задача-то типовая, подобные связи в 1С сплошь и рядом, хотелось бы иметь некий метод, в который можно было бы передавать входящим параметром имя таблицы, имя поля в этой таблице, значение которого хочется получить, еще какие-то параметры, а на выходе получать значение VARCHAR или SQL_VARIANT
...
Рейтинг: 0 / 0
12.09.2014, 10:07
    #38744891
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
bayazet,

в 1С - эталон запросов на SQL. Это точно!
...
Рейтинг: 0 / 0
12.09.2014, 10:09
    #38744895
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
bayazetтолько получается, что задача-то типовая, подобные связи в 1С сплошь и рядом, хотелось бы иметь некий метод, в который можно было бы передавать входящим параметром имя таблицы, имя поля в этой таблице, значение которого хочется получить, еще какие-то параметры, а на выходе получать значение VARCHAR или SQL_VARIANT
Ага, универсальная функция под все запросы ?

Напишите процедуру.
Что вас _обязывает_ писать функцию ?
...
Рейтинг: 0 / 0
12.09.2014, 15:00
    #38745224
bayazet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
GloryНапишите процедуру.
Что вас _обязывает_ писать функцию ?
пока написана именно процедура, в ней запускается курсор по исходной таблице в котором формируются d-sql-запросы, результаты инсертятся во временную таблицу, а потом из этой временной таблицы и берется результирующий датасет

вот как раз и хотелось обойти это трудоемкое и немасштабируемое решение поимев некий метод, который можно было бы использовать как я описал в первом сообщении треда
...
Рейтинг: 0 / 0
12.09.2014, 15:05
    #38745233
Jovanny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
bayazet,

Так и перепишите процедуру, зачем функция понадобилась?
...
Рейтинг: 0 / 0
12.09.2014, 15:07
    #38745238
bayazet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
Jovannybayazet,

Так и перепишите процедуру, зачем функция понадобилась?
наверное, я не понимаю, что вы имеете ввиду под "перепишите"
...
Рейтинг: 0 / 0
12.09.2014, 15:08
    #38745241
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
bayazetнаверное, я не понимаю, что вы имеете ввиду под "перепишите"
Чтобы она была менее трудоемкой и более масштабируемой
...
Рейтинг: 0 / 0
12.09.2014, 15:15
    #38745251
Jovanny
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Хранимая функция с динамическим sql-запросом
bayazetнаверное, я не понимаю, что вы имеете ввиду под "перепишите"
Переделайте, сделайте рефакторинг, модифицируйте, измените текст. Не знаю, как понятнее выразиться.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Хранимая функция с динамическим sql-запросом / 24 сообщений из 24, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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