Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CAST / 7 сообщений из 7, страница 1 из 1
24.10.2002, 15:41:46
    #32061615
alex_v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CAST
declare @intvar int, @VarcharText varchar(30)
set @VarcharText = '3232a'
select @intvar = cast(@VarcharText as int)
print @@error
......

Почему если cast не проходит, то прерывается выполнение всего скрипта? Есть ли еще функции которые прерывают скрипт и как с этим бороться?
...
Рейтинг: 0 / 0
24.10.2002, 15:54:17
    #32061623
Предводитель команчей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CAST
Добрый день. Скрипт прерывается, т.к. произошла исключительная ситуация. Используйте ISNUMERIC для определения, пригодна ли ваша переменная для преобразования в int.

Есть ли еще функции которые прерывают скрипт и как с этим бороться?

Конечно есть ! Любая функция или выражение написанное с ошибкой ! :-)
А бороться просто - писать правильные скрипты.
Удачи !
...
Рейтинг: 0 / 0
24.10.2002, 16:09:51
    #32061630
alex_v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CAST
создадим функцию:
CREATE FUNCTION tst()
RETURNS int
AS
BEGIN
return 5/0
END

Выполним следующий скрипт:
print dbo.tst()
print dbo.tst()

Почему заведомо ошибочная функция не прерывает скрипт, а функция CAST прерывает?
...
Рейтинг: 0 / 0
24.10.2002, 22:41:44
    #32061751
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CAST
Перед клнвертацией проверяйте значение с помощью ISNUMERIC()

Почему заведомо ошибочная функция не прерывает скрипт, а функция CAST прерывает?
Потому-что реакцию сервера на divide-by-zero можно регулировать, а на CAST - нет.
...
Рейтинг: 0 / 0
25.10.2002, 11:35:59
    #32061849
alex_v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CAST
Может кто знает как сделать такую задачу:
нужно написать процедуру выполняющую строку как SQL запрос (аналогично exec 'string'), но чтобы в случае возникновения ошибки текущий батч не прерывался или это сделать невозможно.
например,если выполнить следующий батч:
EXEC('declare @r1 int;set @r1=7777q')
EXEC('declare @r1 int;set @r1=7777/0')
То второй вызов не выполниться, а нужно чтобы выполнились все строки не зависимо от ошибок при вызове EXEC.
...
Рейтинг: 0 / 0
25.10.2002, 13:54:03
    #32061914
Владимир Смирнов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CAST
И так не выполнится?
Код: plaintext
1.
2.
EXEC('declare @r1 int;set @r1=7777q') 
print '1'
EXEC('declare @r1 int;set @r1=7777/0') 
...
Рейтинг: 0 / 0
25.10.2002, 14:20:57
    #32061934
alex_v
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CAST
Проблемма вот в чем:
Вторая строка не выполниться, т.к. ошибка конвертации типов прерывают батч:
Код: plaintext
1.
EXEC('declare @r1 int;set @r1=''7777q''') 
print  1 

но
Код: plaintext
1.
EXEC('declare @r1 int;set @r1=7777/0') 
print  1 

пройдет до конца.
Можно ли сделать так, чтобы в первом случае батч не прерывался?
Что еще кроме конвертации прерывает батч?
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / CAST / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]