Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
нуб987
Guest |
подскажите, как получить "настоящий" код ошибки после выполнения xp_cmdshell? например, делаю так: declare @cl nvarchar(1000) -- command line , @res int -- result set @cl = 'dir "c:\123.txt"' exec @res = master..xp_cmdshell @cl, no_output -- проверяем, есть ли файл возвратит либо 0, либо 1 а как получить код выполнения самого dir, а не процедуры? |
1 дек 16, 05:45 [19953709] Ответить | Цитировать Сообщить модератору |
3unknown Member Откуда: New York Сообщений: 140 |
Запустить без no_output |
1 дек 16, 05:54 [19953714] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
Нубы ж справки не читают, не по-мужски это. |
1 дек 16, 11:33 [19954388] Ответить | Цитировать Сообщить модератору |
нуб987
Guest |
ну и вернет запрос вот это:
парсить? речь-то шла, как код ошибки получить |
||||
2 дек 16, 22:57 [19961915] Ответить | Цитировать Сообщить модератору |
3unknown Member Откуда: New York Сообщений: 140 |
Сделайте так:declare @cl nvarchar(1000) -- command line , @res int -- result ,@ErrorMessage varchar(2000) if object_id('tempdb..#err') is not null drop table #err create table #err (txt varchar(5000)) set @cl = 'dir "c:\123.txt"' insert #err exec @res = master..xp_cmdshell @cl IF @res <> 0 BEGIN SELECT @ErrorMessage = COALESCE(@ErrorMessage + ', ', '') + txt FROM #err WHERE txt IS NOT NULL --Display error message and return code SELECT @ErrorMessage as ErrorMessage ,@res as ReturnCode END |
3 дек 16, 01:55 [19962304] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
нуб987, эта процедура не предназначена для прикладного применения, инструмент администратора. Используют в экстренных случаях. Для задач импорта-экспорта существует Integratin Services. |
5 дек 16, 12:28 [19967604] Ответить | Цитировать Сообщить модератору |
нуб987
Guest |
спасибо за пример. Но это опять не то. Нужен именно код ошибки, а не содержимое командной строки. |
|||
5 дек 16, 16:30 [19968956] Ответить | Цитировать Сообщить модератору |
нуб987
Guest |
забыл добавить, что это для sql2000 там нет Integration Services есть DTS'ы - да но проще для поддержки писать по возможности один большой скрипт, чем разбивать проект на кучи разных составляющих (схемы, пакеты, диаграммы и т.п.) т.е. если позволяют обстоятельства, лучше создать несколько процедур, чем создавать еще и пакеты. Но это уже субъективные привычки со своими достоинствами и недостатками. Лучше здесь это не обсуждать, чтобы не скатиться в холивар. речь изначально шла о том, как получить код ошибки, возвращаемый приложением (в частности dir.exe) |
||
5 дек 16, 16:36 [19968982] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
нуб987, так или иначе, но я бы написал простое приложение, хоть на VBS, и не использовал бы для целей загрузки сам сервер. FSO, например, имеет хорошие возможности для поиска, копирования файлов и директорий и т.д. Скриптом можно вызвать тот же пакет DTS или приложение BCP для загрузки данных на сервер. |
5 дек 16, 16:55 [19969096] Ответить | Цитировать Сообщить модератору |
нуб987
Guest |
а чем bulk insert плох? я проверяю наличие файла dir'ом (хочу получать код ошибки), а потом заливаю bulk insert'ом |
||
5 дек 16, 17:00 [19969124] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8316 |
нуб987, не плох, его также можно внешним скриптом вызвать. Права сисадмина для загрузки не потребуются, в отличие от xp_cmdshell. |
5 дек 16, 17:41 [19969324] Ответить | Цитировать Сообщить модератору |
tunknown Member Откуда: Сообщений: 766 |
Предлагаю создать .cmd файл с командой dir. В конце файла дописать echo %errorlevel%. Запускать этот файл вместо dir. Либо использовать Redirection(&). insert #temp exec @iError= master..xp_cmdshell @sCmd Парсить последнюю строку полученного в #temp результата. |
||
6 дек 16, 17:16 [19973556] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |