|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
Добрый день, Может кто сталкивался Есть проект на C#, в нем есть код, который вызывает хранимую процедуру на сервере ms sql. Всё замечательно, но появилась необходимость передать ещё один параметр. Параметр представляет из себя селект из другой базы, другого сервера. вызываю процедуру так: Код: c# 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.
попробовал в лоб, в вызов добавить новую строку+создал комманду+сослался на туже хранимую, добавил параметр итд в итоге при вызове ошибка procedure or function expects parameter which was not supplied. в принципе понятное дело. Но как можно в одном вызове хранимой передать параметры из разных соединений? P.S. Разделять на два вызова не предлагайте. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 10:46 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
denis_stellПараметр представляет из себя селект из другой базы, другого сервера. Сделать селект, вытащить нужное значение, добавить значение в запрос к процедуре, вызвать процедуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 10:58 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
denis_stellP.S. Разделять на два вызова не предлагайте. Также предлагаю переписать весь код с использованием Код: c# 1. 2. 3. 4.
и Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 11:01 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
Pallarisdenis_stellПараметр представляет из себя селект из другой базы, другого сервера. Сделать селект, вытащить нужное значение, добавить значение в запрос к процедуре, вызвать процедуру. Правильно понимаю, до вызова процедуры, получить необходимые значения селекта из другой базы и полученеые значения передать параметром в процедуре? Тут есть нюанс, может конечно не существенный: 1) Результат селекта это таблица с количеством строк порядка 30-40000 2) Хранимая процедура на серваке, получает параметр @p(см.код) - это селект с текущей базы, где он выпоняется и его значения вставляются во временную таблицу и далее идет разбор/вычисление/подсчет 3) Нужно проделать как в п.2 но с другим запросом 4) если заранее получить значение, как его потом передать, если можно пример ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 11:18 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
Pallaris, спасибо, позже перепишу. А чем плох мой вариант? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 11:19 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
denis_stellРезультат селекта это таблица с количеством строк порядка 30-40000 А, тогда мой вариант не подходит. Такое как параметр не надо передавать. Как параметры нужно передавать условия для запросов, которые будут выполняться в хранимке. А чем плох мой вариант? Много лишних строк, код вырвиглазный. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 11:29 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
Pallarisdenis_stellРезультат селекта это таблица с количеством строк порядка 30-40000 А, тогда мой вариант не подходит. Такое как параметр не надо передавать. Как параметры нужно передавать условия для запросов, которые будут выполняться в хранимке. А чем плох мой вариант? Много лишних строк, код вырвиглазный. Как быть тогда? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 11:36 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
Выборку в ХП для MSSQL 2005 можно передать с помощью xml, для MSSQL 2008 и выше существуют Table-Valued Parameters . Третий вариант - слинковать сервера, и получить нужные данные внутри самой ХП запросом к linked server. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 11:40 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныВыборку в ХП для MSSQL 2005 можно передать с помощью xml, для MSSQL 2008 и выше существуют Table-Valued Parameters . Третий вариант - слинковать сервера, и получить нужные данные внутри самой ХП запросом к linked server. +1 denis_stellА чем плох мой вариант? Не только тем, что код вырви глаз. Это еще ладно. Нужно вызывать Dispose у классов, поддерживающих интерфейс IDisposable. Это и Connection, и Command ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 11:52 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
Сон Веры Павловныможно передать с помощью xml, но лучше не надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 12:19 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
ИзопропилСон Веры Павловныможно передать с помощью xml, но лучше не надо. а почему плох вариант с xml? Много промежуточных шагов? да, создание LinkedServer между ms server 2000 и 2008 r2 интересный вариант ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 12:46 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
denis_stell, хорошего решения нет, но мне кажется использвание локальной временной таблицы будет лучше XML ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 13:07 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
Изопропилно лучше не надо. Можете предложить что-то другое на 2005-м сервере в отсутсвие возможности сделать linked server? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 13:38 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
denis_stellпочему плох вариант с xml? Много промежуточных шагов? Он не плох. И не хорош. Это просто механизм, который стоит применять к месту. Лично на мой взгляд, главный недостаток передачи данных через XML - это большой объем паразитного трафика и медленная скорость обработки. Зато дает большую гибкость + расширенные проверки на корректность с помощью XSD-схем. Что касается Linked Servers - то это неплохой выбор, но не идеальный. Нужно тоже смотреть его уместность. Основной минус - это распределенные транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 13:42 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныМожете предложить что-то другое на 2005-м сервере в отсутсвие возможности сделать linked server? см выше - использование временной таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 14:23 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
Изопропилсм выше - использование временной таблицы это из серии загрузить в таблицу Bulk insert-ом, а потом джойнить её? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 14:54 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
Изопропилсм выше - использование временной таблицы Святым духом во временную таблицу данные не попадут. В обычную временную таблицу SqlBulkInsert'ом залить тоже не получится, т.к. команда на создание таблицы, и SqlBulkInsert в контексте сервера будут исполняться в двух разных батчах - т.е. в батче SqlBulkInsert временной таблицы уже не будет. Можно, конечно, использовать глобальную временную таблицу (##), но тут возможны грабли с параллельной работой. Если не заливать через XML сотни мегабайт (я почему-то уверен, что у ТС именно не сотни мегабайт, а гораздо меньше), то я ничего плохого не вижу в способе с xml+openxml (XQuery, по моим наблюдениям, медленнее)+распарсенные данные в табличную переменную, или во временную таблицу [с нужными индексами]. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 15:08 |
|
передать параметры с разными соединениями одну хранимую процедуру на сервер
|
|||
---|---|---|---|
#18+
Пардон, наврал. Батч будет один, временная таблицы зальется нормально. Перепутал с чем-то другим - помню, что на одном коннекте вторая SqlCommand не видела временную таблицу, созданную в первой. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2013, 15:26 |
|
|
start [/forum/topic.php?fid=20&msg=38491627&tid=1403553]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 176ms |
0 / 0 |