Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> динамический запрос + возврат данных 
V
    Опции темы
Wanderer2019
Дата 13.11.2007, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: нет
Всего: 17



Привет!
Подскажите как решить 2 проблеммы связанные с хранимой процедурой:
1. Динамически подставлять название сервера и БД в запрос.
2. Возвращать 2 параметра из этой процедуры.

По п.1 решением может быть составление теката запроса в формата (например) varchar и далее вызов запроса при помощи EXEC(x).
Но вот п.2 никак решить не получается... если пишу, что в нем присвоение данных каким то переменным (в тексте), то при вызове он пишет, что необходимо объявить переменные, хотя они конечно же объявлены.


PM ICQ MSN   Вверх
AlexxxM
Дата 13.11.2007, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 15.5.2007

Репутация: нет
Всего: нет



Да была такая проблема, в динамическом запросе MSSQL не видит внешние переменные.

Решили с помощью временных таблиц, перед выполнением динамического запроса создаем временную таблицу (ее в динамическом запросе видно), записываем нужные данные во временную таблицу, а после выполнения динамического запроса извлекаем данные из временной таблицы
PM MAIL   Вверх
Wanderer2019
Дата 13.11.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 937
Регистрация: 3.12.2004
Где: Санкт-Петербург/П рага

Репутация: нет
Всего: 17



Цитата(AlexxxM @  13.11.2007,  10:23 Найти цитируемый пост)
создаем временную таблицу

В сиквеле есть какие то спец операторы для этого? или просто Create TABLE/DROP TABLE?
PM ICQ MSN   Вверх
Servena
Дата 13.11.2007, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 10
Всего: 14



А пример можно?
PM MAIL   Вверх
AlexxxM
Дата 13.11.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 15.5.2007

Репутация: нет
Всего: нет



Код

CREATE TABLE #TempTable (s Varchar(10))

EXEC('INSERT INTO #TempTable(s)
           SELECT Column1 FROM OtherTable WHERE ...')

SELECT s FROM #TempTable


Что-то вроде такого.
Временные таблицы создаются также как и обычные таблицы, перед именем таблицы ставится символ #, он и указывает серверу что это временная таблица. DROP TABLE можно не делать, таблица сама уничтожиться по окончании сторед процедуры. Вообще это и в helpе вполне понятно описано.
PM MAIL   Вверх
VOS
Дата 13.11.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 145
Регистрация: 31.1.2007

Репутация: 2
Всего: 8



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

Код

DECLARE @SQLString nVARCHAR(500)
DECLARE @Param nVARCHAR(500)
--in параметр
declare @orderid int 
--out параметр 
declare @cnt  int      

SET @SQLString = N'SELECT @cnt=count(*) FROM northwind.dbo.orders WHERE orderid = @orderid'
--указать что за параметры, тип и in/out
SET @Param = N'@cnt int out,@orderid int'

--можно так инициализировать, или см. ниже
--set @orderid= 10248

EXECUTE sp_executesql @SQLString, @Param,
                      @cnt out, @orderid =10248 

--проверить
select @cnt

PM MAIL   Вверх
Todd
Дата 16.1.2008, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 14.3.2006
Где: Одесса

Репутация: нет
Всего: нет



А если динамический запрос должен возвратить xml? 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0816 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.