2013-04-16 3 views
0

Просто начинайте с SQL, так что здесь, вероятно, очень простой ответ, но я не мог точно определить, что мне нужно сделать из поиска Google.SQL получает выход из хранимой процедуры?

В базе данных, которую я использую, называется dt_char_sp. В качестве базы данных я использую метод dt_char_sp - просто введите, параметры - это дата и время как int, а хранимая процедура форматирует их красиво. Я бы ожидать, что что-то работает так:

EXEC dt_char_sp 20130416, 024356 
go 

выход:

04/06/2013 02:43:56 

кроме выхода не бывает! Я вижу, что есть переменная, объявленная как «@datetime datetime = NULL OUTPUT», и в конечном итоге переменная @datetime заполняется форматированной строкой, но мне интересно, есть ли способ получить эту переменную вывода?

+1

Здесь не хватает информации для предоставления помощи. Вы называете это кодом (.NET, Java, PHP)? (И если да, то какой язык) или с помощью инструмента/программного обеспечения, такого как SQL Server Management Studio – David

ответ

1

Мы не можем быть уверены, что не наблюдаем хранимую процедуру, но похоже, что она использует выходной параметр.

DECLARE @retval As DATETIME 

EXEC dt_char_sp 20130416, 024356, @[email protected] OUTPUT 

PRINT @retval 
go 

Существует эквивалентный способ сделать это и из кода клиента.

+0

Спасибо! Мне не хватало ключевое слово OUTPUT вне хранимого_проса, и поэтому это не работало. конечным результатом было: 'declare @ datetime2 datetime exec dt_char_sp 20130401, 111111, @ datetime = @ datetime2 OUTPUT Select @ datetime2;' – user1642475

+0

@ user1642475 Да, сначала все забывают об этом. Всегда кажется неестественным/нелогичным, что вы должны указать его на * CALL *, но так оно и есть. – RBarryYoung

0

Вы уверены, что что-то делаете, чтобы получить возвращаемое значение? Если нет, то вы можете выбрать переменную

select @datetime 
-1

Пожалуйста не обременит SQL Server с хромом вещи, как форматирование строк. Это слишком важно для такого рода вещей. Я вижу это много в последнее время, и это плохая привычка.

Пожалуйста, используйте клиент форматирования инструменты для этого ...

Что-то вроде (для дат UNIX-типа)

DateTime dt = new DateTime("1/1/1970").AddDays(myIntDate); 

Console.Writeln(dt.ToString("mm/dd/yyyy")); 

Это лучше для многих причин - производительность большой один , У вас есть все данные, которые вам нужны, нет причин совершать кругосветное путешествие на очень дорогой сервер, когда вам от него ничего не нужно. Все компьютеры могут форматировать даты, не использовать для этого сервер.

Это правильный ответ. Я не думаю, что Stack Overflow станет местом, где, если кто-то спросит, как спрыгнуть с моста, мы просто скажем им. Когда кто-то спрашивает, как выполнить что-то, ИСПОЛЬЗУЯ НЕПРАВИЛЬНЫЙ МЕТОД, МЫ ДОЛЖНЫ СКАЗАТЬ ИХ ПРАВИЛЬНЫЙ МЕТОД.

+0

-1, это, безусловно, вопрос для комментариев. Даже не отдаленно отвечающий на вопрос – phadaphunk

+0

Хм, приятно знать. К сожалению, в более широком контексте того, что я пытаюсь переключить, дата в сценарии оболочки не подходит. – user1642475

+0

Тогда вы должны были сказать: «Я использую скрипт оболочки, и мне нужно иметь строки формата сервера для меня» в вашем исходном вопросе. – Jasmine

1

Вам необходимо использовать Select statement.

В конце запроса просто выберите нужную выходную переменную следующим образом:

SELECT @datetime 

Другим способом было бы использовать Output Parameter. Объявлено так:

@datetime DateTime OUTPUT; 
+0

Это, похоже, не работает ... В хранимой процедуре, @datetime изначально определяется как: – user1642475

+0

Я буду подразумевать, что вы используете Sql Server. Перейдите в проводник объектов/YourDatabase/Programmability/StoredProcedure/щелкните правой кнопкой мыши по dt_char_sp и измените его. В самом конце последней строки процедуры добавьте 'SELECT @ datetime' и запустите запрос, чтобы применить изменения. Если это не сработает, дайте мне ошибку. – phadaphunk

+0

Оооо. Есть ли способ сделать это за пределами хранимой процедуры? В хранимой процедуре @datetime изначально определяется как: '@datetime DateTime OUTPUT;' Есть ли способ ссылаться на этот «ВЫХОД» за пределами стробированного процесса? т.е. если я выполняю это в отдельном SQL-запросе? что-то вроде: 'объявить @ Datetime2 даты и времени выполнить dt_char_sp 20130401, 111111, @datetime = @ datetime2 выберите @ datetime2' – user1642475

Смежные вопросы