Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
Arcehry
Member

Откуда:
Сообщений: 14
Задача:

  • Программа посылает запрос в БД через SELECT (получается вызвать функцию, а процедуру не получается)
  • БД собирает данные (реализованно)
  • БД записывает данные в статическую таблицу, хотя она используется как временная (получается в процедуре, а в функции не получается)
  • Передать данные в программу для дальнейшей обработки (получается, если данные записаны в статической таблице, со временными таблицами не получается)

    Т.е. основные загвоздки,
  • или как дернуть процедуру на исполнение посредством SELECT ? Процедура без параметров
  • или как в функции добавлять записи в статическую таблицу ?

    exec sp_executesql пробовала, но пишет "Only functions and some extended stored procedures can be executed from within a function." И вообще пишут. что по каким-то политикам безопасности в функции ничего такого делать нельзя.
    Общение программы с БД закрыто и надо пользовать то что есть:((

    Может что посоветуете?
    Очень надо.
    Заранее спасибо
  • 11 авг 16, 19:59    [19531276]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    a_voronin
    Member

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

    Declare @tablevar table(col1,..
    insert into @tablevar(col1,..) exec MyStoredProc 'param1', 'param2'
    
    SELECT col1, col2 FROM @tablevar
    
    11 авг 16, 20:00    [19531280]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Arcehry
    Member

    Откуда:
    Сообщений: 14
    Нет так нельзя, Select который забирает данные, может забрать их только из статической таблицы, иначе сплошные глюки
    Можно сделать два Select
    один вызовет процедуру и вернет пустышку
    другой заберет данные из статической таблицы
    11 авг 16, 20:08    [19531303]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Гавриленко Сергей Алексеевич
    Member

    Откуда: Moscow
    Сообщений: 37061
    Ну, CLR попробуйте.
    11 авг 16, 20:11    [19531320]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Arcehry
    Member

    Откуда:
    Сообщений: 14
    Что это такое и как с ним работать?
    11 авг 16, 20:14    [19531348]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Arcehry
    Member

    Откуда:
    Сообщений: 14
    Поискала, вроде он только для новых. У меня SQL Server 2008
    11 авг 16, 20:18    [19531367]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Arcehry
    Member

    Откуда:
    Сообщений: 14
    Гавриленко Сергей Алексеевич, a_voronin ,

    А других вариантов нет?
    11 авг 16, 20:28    [19531391]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    a_voronin
    Member

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

    CLR появился в 2005
    11 авг 16, 20:28    [19531392]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Pavel1211
    Member

    Откуда: Екатеринбург
    Сообщений: 205
    Arcehry, там тоже есть sqlclr
    11 авг 16, 20:30    [19531399]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Гавриленко Сергей Алексеевич
    Member

    Откуда: Moscow
    Сообщений: 37061
    Arcehry
    Гавриленко Сергей Алексеевич, a_voronin ,

    А других вариантов нет?
    У вас очень мало вариантов, чтобы их перебирать, потому что писать из функции в базц не получится.
    11 авг 16, 20:32    [19531405]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Arcehry
    Member

    Откуда:
    Сообщений: 14
    А дернуть процедуру через Select?

    Ведь на сколько я поняла в clr надо будет написать какуюто библиотеку, и ее присоединять к базе.
    А в функциях clr значит писать в таблицы можно?
    11 авг 16, 20:54    [19531459]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    alexeyvg
    Member

    Откуда: Moscow
    Сообщений: 31435
    Arcehry
    А дернуть процедуру через Select?
    "Select" - это у вас что такое?
    Такой "Select" можно запустить: "select aaa from table exec MyProc"?
    11 авг 16, 21:25    [19531559]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Arcehry
    Member

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

    Возможно. Я не сильна в sql
    Можете, пожалуйста, привести более конкретный пример применение такой структуры, а то не совсем понятно что есть что.
    12 авг 16, 11:16    [19533108]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Владислав Колосов
    Member

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

    запомните - функции предназначены только для получения данных.
    Для выполнения операций изменения данных предназначены процедуры.

    автор
    или как дернуть процедуру на исполнение посредством SELECT

    Выполняйте SELECT внутри процедуры. Переписывайте программу.

    И, главный вопрос - что именно требуется реализовать? Вы описали не задачу, а Ваше решение задачи.
    12 авг 16, 11:27    [19533197]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Arcehry
    Member

    Откуда:
    Сообщений: 14
    Владислав Колосов,

    Я понимаю что есть предназначения, но есть и задачи, в которых куча ограничений.

    Под Select подразумевается создание вьюшки. Внешняя программа дергает именно вьюшку. Если вьюшка возьмет данные не из статической таблицы, то к ее данным достучаться не получится.

    "Выполняйте SELECT внутри процедуры." А как я достучусь до этой процедуры?

    Задача: Собрать данные с разных таблиц в определенном виде (длиннющая строка и пара параметров) и отдать набор этих данных (около 70тысяч строк) внешней программе для дальнейшей обработки.
    Обычно такие операции выполняет внешняя программа, дергая только конкретные данные. Но в данном случае процедура в базе отрабатывает на несколько порядков быстрее (5часов или 5 минут - разница значительная).
    Осталось самое трудное - установить все связи между базой и внешней программой, чтоб все работало, и данные передавались.
    12 авг 16, 12:08    [19533501]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Konst_One
    Member

    Откуда:
    Сообщений: 11538
    что у вас за программа из которой вы какие-то вьюшки создаёте на сервере?
    12 авг 16, 12:11    [19533529]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 47000
    Arcehry
    Если вьюшка возьмет данные не из статической таблицы, то к ее данным достучаться не получится
    Пробовали создать такое представление?
    12 авг 16, 12:15    [19533558]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Arcehry
    Member

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

    Конечно, изначальное решение было, чтоб вьюшка забирала данные напрямую из функции, которая собирала данные во временную таблицу. Но не взлетело(
    12 авг 16, 12:30    [19533639]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Arcehry
    Member

    Откуда:
    Сообщений: 14
    Konst_One
    что у вас за программа из которой вы какие-то вьюшки создаёте на сервере?

    Вопрос не поняла. Программа нашей фирмы, хотя по некоторым причинам исходники ядра не доступны
    12 авг 16, 12:33    [19533657]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    iap
    Member

    Откуда: Москва
    Сообщений: 47000
    Arcehry
    iap,

    Конечно, изначальное решение было, чтоб вьюшка забирала данные напрямую из функции, которая собирала данные во временную таблицу. Но не взлетело(
    VIEW нельзя создать на основе временных таблиц.
    Функции специального вида могут делать всё, что хочешь, но это редкостное извращение,
    особенно если "я не сильна в sql".
    Надо срочно выбросить из головы мысли о функции, которая меняет данные в таблицах.
    12 авг 16, 12:36    [19533675]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Konst_One
    Member

    Откуда:
    Сообщений: 11538
    если это ваша программа, то как она работает с некой базой данных на сервере?
    к каким конкретно объектам в базе она имеет доступ, какие запросы делает к базе?
    вы можете это объяснить, себе и нам?

    опишите, что вы в этой программе пытаетесь сделать, зачем вам какой-то SELECT (у вас там окошко в программе что-ли , где вы прямой запрос пишите к базе)?
    12 авг 16, 12:37    [19533681]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Владислав Колосов
    Member

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

    Зачем Вы вообще вмешиваетесь в работу комплекса клиент-сервер стороннего разработчика? Дров наломаете.
    12 авг 16, 13:59    [19534234]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Arcehry
    Member

    Откуда:
    Сообщений: 14
    Мне главным образом нужен ответ на сабдж.

    Как вызвать процедуру в посредством SELECT (создание вьюшки) ? Возможно ли это сделать?
    Как в функции реализовать INSERT в таблицу? Возможно ли это?

    Мне сказали рыть в эту сторону.
    Если точно ничего нельзя сделать, то пойду к синьерам за другими стратегиями поиска решения

    Рассказывать как чего и с чем взаимодействует долго да и в чем-то не разглашаемая информация
    12 авг 16, 14:06    [19534291]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    Arcehry
    Member

    Откуда:
    Сообщений: 14
    Владислав Колосов
    Arcehry,

    Зачем Вы вообще вмешиваетесь в работу комплекса клиент-сервер стороннего разработчика? Дров наломаете.


    Это моя работа
    12 авг 16, 14:07    [19534301]     Ответить | Цитировать Сообщить модератору
     Re: Как вызвать процедуру в SELECT, или в функции реализовать INSERT в таблицу?  [new]
    PaulYoung
    Member

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

    так можно
    SELECT
      t.*
    FROM OPENROWSET('SQLNCLI', 'SERVER=srv;Trusted_Connection=yes;', 'exec main.dbo.StoredProc @Param = 0') As t
    
    12 авг 16, 14:18    [19534397]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
    Все форумы / Microsoft SQL Server Ответить