Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обработка результата хранимой процедуры

6
20 марта 2009 года
George
4.1K / / 05.01.2007
Собственно уже спортивный интерес. Писал вчера скрипучий скрипт, который берет всех юзеров, у которых нет логинов, ну и собственно генерирует для каждого логин. БД: MS SQL Server 2000. Так вот в чем прикол... Для того, чтобы получить список юзеров, у которых нет логина, выполняю хранимку sp_change_users_login 'report', '', ''. Она возвращает результат в виде таблицы в два столбца - Username & SID. Так вот. Задача для этого результата объявить курсор, ну и пробежать в цикле, создавая логины. Так вот при объявлении курсора этот результат не воспринимается как таблица. Соответственно не работает. Сделали так - просто из хранимки выдрали текст нужного запроса, объявили курсор. Все норм. Но вот из спортивного интереса хотелось бы узнать, возможно ли "сконвертировать" результат хранимки в таблицу? например временную...
5
20 марта 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Washington
...


 
Код:
DECLARE @tmp TABLE( id int, title varchar(50) )

INSERT INTO @tmp
    EXEC proc1

SELECT * FROM @tmp


где proc1:
 
Код:
CREATE PROCEDURE [dbo].[proc1]
AS
BEGIN
   
    SELECT id, title FROM t1

END
6
20 марта 2009 года
George
4.1K / / 05.01.2007
а я так и думал, что надо копать в сторону переменной типа табле.
6
20 марта 2009 года
George
4.1K / / 05.01.2007
гм. попробовал. сказало, мол нельзя в качестве источника данных для переменной использовать EXEC. :-/
5
20 марта 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Washington
гм. попробовал. сказало, мол нельзя в качестве источника данных для переменной использовать EXEC. :-/


Да, действительно это фича 2005го сервера - добавлять данные через EXEC/EXECUTE в переменную-таблицу, но для добавления в обычную или временную таблицу способ работает.

6
20 марта 2009 года
George
4.1K / / 05.01.2007
а вот не сработало. Terminating this procedure. Cannot have an open transaction when this is run
5
20 марта 2009 года
hardcase
4.5K / / 09.08.2005
Цитата: Washington
а вот не сработало. Terminating this procedure. Cannot have an open transaction when this is run


(Жабер жабером, конечно)

Предложение вида
INSERT INTO MyTable EXEC proc @param1, @param2
создает пользовательскую транзакцию

Тогда как в теле sp_change_users_login есть интересные строки:

 
Код:
-- ERROR IF IN USER TRANSACTION --  
    if @@trancount > 0  
    begin  
        raiserror(15289,-1,-1)  
        return (1)  
    end
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог