Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 sqlcmd - как узнать были ли ошибки  [new]
StenlyTvidl
Member

Откуда:
Сообщений: 68
Здравствуйте!


Посоветуйте способ узнать выполнился скрипт с\без ошибок.

Есть скрипт для обновления БД 'Script.sql'
На клиентском приложении нажимается кнопка и этот скрипт выполняется на сервере, с помощью процедуры, см. кусочек кода:

declare @strSQL varchar( 400 )
	,@Result int
set @strSQL = 'sqlcmd -E -S "ServerName" -d "DBName" -l 30 -i "Script.sql"'
exec @Result = master..xp_cmdshell @strSQL, no_output
select [@Result] = @Result

@Result всегда "0", не зависимо от того были ли ошибки при выполнения скрипта или нет.
Как вытащить ошибку команды sqlcmd?


С уважением,
Дмитрий
30 окт 09, 12:53    [7861607]     Ответить | Цитировать Сообщить модератору
 Re: sqlcmd - как узнать были ли ошибки  [new]
StenlyTvidl
Member

Откуда:
Сообщений: 68
в параметры команды sqlcmd добавил параметр "-b"
теперь при ошибках errorlevel в DOS-е возвращает 1 - ура!!!

Но можно ли узнать errorlevel последней коммандры xp_cmdshell в sql процедуре?
30 окт 09, 13:17    [7861831]     Ответить | Цитировать Сообщить модератору
 Re: sqlcmd - как узнать были ли ошибки  [new]
StenlyTvidl
Member

Откуда:
Сообщений: 68
Все заработало!!!

Просто после добавления параметра "-b" в команду sqlcmd забыл пересоздать процедуру и она работала по старому.

Еще если кому интересно в команде есть возможность задавать файл куда будут записываться ошибки выполнения, делается это так:

1. В начале файла скрипта пишется:
:Error "C:\Tmp\qTest02.txt"
GO
... и далее ваш скрипт 

Теперь после выполнения скрипта будет создан файл "C:\Tmp\qTest02.txt", если ошибок не было, то он будет пустой, а если были там будет текст ошибки.

2. Так же можно создать отдельный файл (например: "C:\Tmp\qErrorFile.sql" ) с одной строчкой:
:Error "C:\Tmp\qTest02.txt"

и тогда команда будет такой:

eclare @strSQL varchar( 400 )
	,@Result int
set @strSQL = 'sqlcmd -E -S "ServerName" -d "DBName" -l 30 -i "C:\Tmp\qErrorFile.sql","C:\Tmp\Script.sql" -b'
exec @Result = master..xp_cmdshell @strSQL, no_output
select [@Result] = @Result

в этом случае скрипт "C:\Tmp\Script.sql" будет выполняться до первой ошибки, затем прервется. Текст ошибки будет в файле "C:\Tmp\qTest02.txt". Если ошибок не будет скрипт выполниться до конца и файл "C:\Tmp\qTest02.txt" будет пустой.


Спасибо всем кто помог разобраться с командой sqlcmd
2 ноя 09, 11:49    [7869824]     Ответить | Цитировать Сообщить модератору
 Re: sqlcmd - как узнать были ли ошибки  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8676
ms-help://MS.SQLCC.v10/MS.SQLSVR.v10.ru/s10de_5techref/html/e1728707-5215-4c04-8320-e36f161b834a.htm
-P password
Пароль, заданный пользователем. Пароли учитывают регистр. Если указан параметр -U, а параметр -P отсутствует, и не установлена переменная среды SQLCMDPASSWORD, программа sqlcmd запрашивает пароль у пользователя. Если параметр -P указан в конце командной строки без указания пароля, то программа sqlcmd использует значение пароля по умолчанию (NULL).


Microsoft SQL Server 2008 (SP1) - 10.0.2531.0 (Intel X86) Mar 29 2009 10:27:29

-----------------------
У меня пустой пароль на sa (мне так у добно и всё).
Указанным в описании способом параметр -P (как мне кажется) не функционирует.
В зависимости от типа авторизации ("-E" или "-U -P") тест на выполнение процедуры проходит как-то криво. Сообщение об ошибке авторизации не появляется. Вероятно, причина исключительно в пустом пароле, НО... ИМХО, доку бы поправить...


Или я чего-то не так понял?
16 ноя 09, 02:40    [7931641]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить