Ошибка преобразования VARCHAR в INT? - PullRequest
0 голосов
/ 08 апреля 2011

Сообщение 245, Уровень 16, Состояние 1, Строка 89 Преобразование не удалось при преобразовании значения varchar 'Произошла ошибка при создании сборки System.DirectoryServices.к типу данных int.

Эта ошибка вызвана приведенным ниже утверждением:

begin try print '  - Preparing to create System.DirectoryServices assembly with UNSAFE_ACCESS permission'
    create assembly [System.DirectoryServices] from 'c:\Windows\Microsoft.NET\Framework\v2.0.50727\System.DirectoryServices.dll'
    with permission_set = unsafe
    print '  - System.DirectoryServices assembly created'
end try
begin catch
    print 'There was an error creating the System.DirectoryServices assembly. '+Error_number()+Error_Severity()
end catch

1 Ответ

2 голосов
/ 08 апреля 2011

Это происходит от вашей конкатенации числа к строке в блоке catch. Это не разрешается без приведения, так как он пытается преобразовать строку в число, а не наоборот, и поскольку ваш строковый литерал не является числовым, эта попытка обречена на провал!

Вы можете использовать RAISERROR со степенью серьезности 0, чтобы напечатать сообщение со значениями, подставленными в, или альтернативой является самостоятельная конкатенация строки с использованием явных приведений.

begin catch
declare @num int = Error_number()
declare @sev int = Error_Severity()
raiserror('There was an error creating the System.DirectoryServices assembly. %d %d ',0,1, @num,@sev)
end catch
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...